WinUI UWP编程调用系统快捷键及输入注入后键盘异常问题求解
WinUI UWP触发Win+V等系统快捷键的实现方案与异常问题解决
可行性说明
Win+V打开剪贴板历史这类系统快捷键没有提供直接调用的公开API,通过键盘输入注入是目前可行的实现方案。
注入后物理键盘异常的原因
你遇到的故障是因为注入逻辑不完整导致的:
原代码仅注入了Win键和V键的按下事件,没有补充对应按键的抬起事件,系统会判定这两个按键一直处于被按下的状态,后续所有物理键盘输入都会被识别为和Win、V的组合按键,因此出现按键映射错误、随机触发系统快捷键的问题。系统默认会在10秒后强制抬起长时间未上报抬起状态的按键,所以关闭应用后故障仍会持续10秒才恢复。
正确实现代码
首先需要在应用的Package.appxmanifest清单中添加输入注入的受限权限声明:
<Capabilities> <rescap:Capability Name="inputInjectionBrokered" /> </Capabilities>
完整的注入逻辑需要按顺序发送「按下Win键、按下V键、抬起V键、抬起Win键」四个输入事件,示例代码如下:
var injector = InputInjector.TryCreate(); if (injector == null) { // 系统版本低于17763或无权限时会创建失败,可在此补充异常处理逻辑 return; } // 按下左Win键 var winDown = new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.LeftWindows, KeyOptions = InjectedInputKeyOptions.None }; // 按下V键 var vDown = new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.V, KeyOptions = InjectedInputKeyOptions.None }; // 抬起V键 var vUp = new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.V, KeyOptions = InjectedInputKeyOptions.KeyUp }; // 抬起左Win键 var winUp = new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.LeftWindows, KeyOptions = InjectedInputKeyOptions.KeyUp }; injector.InjectKeyboardInput(new[] { winDown, vDown, vUp, winUp });
注意事项
- 输入注入功能仅支持Windows 10 17763及以上版本的系统
- 部分企业设备可能会通过组策略禁用输入注入功能,需要提前做好兼容处理
内容的提问来源于stack exchange,提问作者Kris2k
相关产品推荐
相关产品推荐

