UWP input injection API向其他UWP应用注入部分按键无效问题咨询
问题原因
导致该问题的核心原因有3个:
- UWP应用运行在AppContainer沙箱中,对跨进程输入注入有更严格的权限校验,未申请对应受限权限的注入请求会被系统拦截,仅空格这类基础输入按键会被放行。
- 你当前仅注入了按键按下事件,未补全按键抬起事件。大多数UWP应用的导航类按键(翻页、方向键等)要求完整的
KeyDown + KeyUp事件序列才会触发响应,而空格这类常用输入键对单次按下事件的容错性更高,所以可以正常生效。 - 仅传入
VirtualKey参数缺少扫描码配置,部分UWP应用的输入处理逻辑会优先读取扫描码,扫描码为空的注入事件会被判定为无效输入直接丢弃。
解决方案
按以下步骤调整即可解决注入失效问题:
- 若你使用的是打包应用,需在Package.appxmanifest中添加输入注入受限功能声明,非打包桌面应用需以管理员权限运行程序。
- 所有按键注入都需要补全按下、抬起两个事件,不要仅发送单次按下事件。
- 注入时补充对应按键的扫描码参数,不要仅填写虚拟键值。
- 若为桌面程序调用UWP输入注入API,需先通过
IInitializeWithWindow接口将注入实例与当前进程的主窗口句柄绑定,避免沙箱拦截。
正确注入代码示例
var inputInjector = InputInjector.TryCreate(); // 权限不足时TryCreate会返回null,需提前处理权限问题 if (inputInjector == null) return; // 注入PageDown按下事件 inputInjector.InjectKeyboardInput(new[] { new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.PageDown, ScanCode = 0x51, // PageDown对应的硬件扫描码 KeyOptions = InjectedInputKeyOptions.None }}); // 注入PageDown抬起事件 inputInjector.InjectKeyboardInput(new[] { new InjectedInputKeyboardInfo { VirtualKey = (ushort)VirtualKey.PageDown, ScanCode = 0x51, KeyOptions = InjectedInputKeyOptions.KeyUp }});
其他常用按键的扫描码可参考Windows官方硬件扫描码表配置即可。
内容的提问来源于stack exchange,提问作者jacobz
相关产品推荐
相关产品推荐

