You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP input injection API向其他UWP应用注入部分按键无效问题咨询

问题原因

导致该问题的核心原因有3个:

  • UWP应用运行在AppContainer沙箱中,对跨进程输入注入有更严格的权限校验,未申请对应受限权限的注入请求会被系统拦截,仅空格这类基础输入按键会被放行。
  • 你当前仅注入了按键按下事件,未补全按键抬起事件。大多数UWP应用的导航类按键(翻页、方向键等)要求完整的KeyDown + KeyUp事件序列才会触发响应,而空格这类常用输入键对单次按下事件的容错性更高,所以可以正常生效。
  • 仅传入VirtualKey参数缺少扫描码配置,部分UWP应用的输入处理逻辑会优先读取扫描码,扫描码为空的注入事件会被判定为无效输入直接丢弃。
解决方案

按以下步骤调整即可解决注入失效问题:

  1. 若你使用的是打包应用,需在Package.appxmanifest中添加输入注入受限功能声明,非打包桌面应用需以管理员权限运行程序。
  2. 所有按键注入都需要补全按下、抬起两个事件,不要仅发送单次按下事件。
  3. 注入时补充对应按键的扫描码参数,不要仅填写虚拟键值。
  4. 若为桌面程序调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:48:03