Windows触摸消息截断问题

Detach Ryan 0 信誉分
2026-02-07T14:57:14.08+00:00

我正在制作一个触摸手势应用,我想知道当系统已经与软件建立起触摸消息连接后,第三者(我的应用)如何去切断这个数据流。

  1. 我想知道有没有能够让通过InjectTouchInput注入的触摸消息与Tabtip等高权限应用交互的方法:我目前完成度最高的方案是使用RegisterPointerInputTarget重定向所有的触摸消息,再由InjectTouchInput注入回系统,在这种架构下,我的应用成为实际的触摸消息产生者,我可以随意控制触摸数据流。但是InjectTouchInput存在UIPI相关的权限问题,注入的触摸消息无法与tabtip等高权限软件交互,这是致命的缺陷。
  2. 目前还有一个备选方案是RegisterTouchHitTestingWindow与RegisterRawInputDevices的组合拳,这是Gemini推荐给我的,它说命中测试会在整个触摸消息的生命周期中的每一帧进行,但是我没找到来源。我不认可这种方案
  3. 我还注意到一个现象:在最大化chrome窗口下,从屏幕右侧边缘向内滑动,chrome会先占据焦点,而后windows的通知中心被拉出,通知中心抢占焦点,这是怎么实现的?
Windows 开发 | Windows API - Win32
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jack Dang (WICLOUD CORPORATION) 14,580 信誉分 Microsoft 外部员工 仲裁人
    2026-02-09T06:17:15.9266667+00:00

    你好 @Detach Ryan ,

    感谢你的反馈。

    直接回答你的问题:目前没有受支持的方式,让用户模式下的第三方应用在拦截、修改并重新注入触控输入的同时,仍能与高权限系统应用交互。要实现这种级别的控制,需要系统级组件(例如驱动程序或受信任的服务)。

    Windows 对真实硬件触控和通过 InjectTouchInput 生成的合成触控有严格的区分。像 RegisterPointerInputTargetRegisterTouchHitTestingWindowRegisterRawInputDevices 这类 API 可以帮助应用观察或影响触控路由,但它们并不能让第三方应用在系统介入后完全接管或重放整个触控数据流。

    你的 RegisterPointerInputTarget 方案在初期是可行的,因为你的应用可以先接收到指针消息。但一旦将触控重新注入系统,这些输入就会被标记为合成输入,此时 UIPI 会阻止它们与 TabTip 等高权限系统组件进行交互。这是有意的设计,普通的用户模式应用无法绕过。

    你观察到的 Chrome 与通知中心的行为有所不同,因为那是基于真实的硬件触控。Windows 能够识别这是系统边缘手势,并从应用中收回控制权,这种行为只有操作系统本身才能做到。

    希望这能对你有所帮助!如果我的回答对你有帮助,也欢迎按照这里的指引进行操作,让遇到同样问题的其他人也能受益: https://learn.microsoft.com/zh-cn/answers/support/accept-answer

    1 个人认为此答案很有帮助。

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。