Windows平台如何拦截被应用吸收的触控笔事件并区分鼠标与触控笔输入
全局触控笔输入捕获解决方案
你遇到的问题本质是Chrome、Edge、VSCode等应用主动开启了原生指针输入处理,系统不会再将这类应用窗口内的触控笔输入模拟为鼠标事件,因此原有WH_MOUSE_LL低级鼠标钩子无法捕获对应事件。
核心解决方法
使用Windows原生的全局低级指针钩子替换原有的鼠标钩子:
- 调用
SetWindowsHookEx(WH_POINTER_LL, 钩子回调函数, 当前进程实例句柄, 0)注册全局指针输入钩子,该钩子可以捕获全系统所有指针类输入事件,覆盖鼠标、触控笔、触控板等所有输入设备 - 在钩子回调的参数中解析
POINTER_INFO结构体,通过pointerType字段直接区分输入设备类型:- 值为
PT_POINTERPEN时,输入来自触控笔 - 值为
PT_POINTERMOUSE时,输入来自普通鼠标
- 值为
- 识别到对应输入类型后,直接复用原有业务逻辑即可
兼容说明
- 该钩子仅支持Windows 8及以上系统,匹配你使用Windows 10的场景,和原有低级鼠标钩子的权限要求一致,不需要额外申请管理员权限
- 你原有的通过
MSLLHOOKSTRUCT.dwExtraInfo == 0xFF515712判断触控笔的逻辑可以保留,和指针类型判断做双重校验,提升识别准确率
注意事项
钩子回调的处理逻辑要尽可能精简,不要执行耗时操作,避免处理超时导致系统自动卸载你的全局钩子。
内容的提问来源于stack exchange,提问作者ladofa
相关产品推荐
相关产品推荐

