我已经在我的 C# uwp 应用程序中实现了启动屏幕截图工具,并且它在 Windows 10 操作系统中运行良好。预期的行为是达到我们按下组合 windows + shift + s 的状态。
这是我的命令正文:
bool result = await Launcher.LaunchUriAsync(new Uri("ms-
screenclip:edit?source=SOURCE"));
if (result)
{
Clipboard.ContentChanged += Screenshot_Succeeded;
}
在 Windows 11 操作系统中,相同的实现只是启动截图工具,我需要单击新的屏幕截图才能达到相同的状态。
所以主要问题是 screenclip 在 win11 中与 screensketch 一样工作。
是否可以达到与 Windows 10 相同的功能?
你能帮我怎样才能获得与win10操作系统相同的功能吗?
解决方法是您可以尝试从代码中注入组合键输入,这样您就可以像 Windows 10 中的旧行为一样直接启动截图功能。
在开始使用 InputInjector Class 之前,我们需要先将 inputInjectionBrokered 受限功能添加到清单文件中。
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
并在功能选择中
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="inputInjectionBrokered" />
</Capabilities>
然后您可以使用以下代码注入键盘输入来直接启动截图功能。
private void Button_Click(object sender, RoutedEventArgs e)
{
//press key
InputInjector inputInjector = InputInjector.TryCreate();
var shift = new InjectedInputKeyboardInfo();
shift.VirtualKey = (ushort)(VirtualKey.Shift);
shift.KeyOptions = InjectedInputKeyOptions.ExtendedKey;
var win = new InjectedInputKeyboardInfo();
win.VirtualKey = (ushort)(VirtualKey.LeftWindows);
win.KeyOptions = InjectedInputKeyOptions.ExtendedKey;
var skey = new InjectedInputKeyboardInfo();
skey.VirtualKey = (ushort)(VirtualKey.S);
skey.KeyOptions = InjectedInputKeyOptions.None;
inputInjector.InjectKeyboardInput(new[] { shift, win,skey });
// release shift and win key
shift.KeyOptions = InjectedInputKeyOptions.KeyUp;
win.KeyOptions = InjectedInputKeyOptions.KeyUp;
inputInjector.InjectKeyboardInput(new[] { shift, win });
//bool result = await Launcher.LaunchUriAsync(new Uri("ms-screenclip: edit ? source = SOURCE"));
}