windows - 如何区分触摸板产生的WM_MOUSE***消息和鼠标设备产生的消息?
问题描述
我试过GetMessageExtraInfo()
在这里提到:
检测 WM_MOUSEMOVE 是否由触摸/笔引起
但它不起作用 -GetMessageExtraInfo()
返回0
触摸板生成的所有鼠标事件。
在带有集成触摸板的笔记本电脑和带有外部触摸板的台式电脑上进行了尝试。
我也尝试使用 WM_TOUCH 事件,RegisterTouchWindow()
但WM_GESTURE
它们也不起作用 - 我既没有收到也没有收到WM_TOUCH
窗口WM_GESTURE
上的事件。
基本上我需要的是检测手指何时打开和关闭触摸板。但似乎 WM_TOUCH 或 WM_GESTURE 仅适用于触摸屏,但不适用于触摸板,原因不明。
有什么建议吗?
解决方案
如果您需要能够区分输入源,请考虑使用WM_POINTER*
消息而不是旧WM_MOUSE*
消息。请注意,这将需要调用EnableMouseInPointer()
以接收有关系统认为是鼠标的设备的消息(对于许多基本触摸板来说都是如此)。
与WM_MOUSE*
消息不同,消息wParam
告诉您某些虚拟键的状态,WM_POINTER
消息包含足够的信息以能够跟踪输入源。更复杂的是,指针消息不会根据按下的按钮提供单独的消息,但至少该信息仍然可用。
推荐阅读
- electron - Windows Store 上未显示 Electron JS 应用程序图标
- spring-mvc - 我可以更改 Spring 的 ProxyExchange 中使用的 RestTemplate 吗?
- strapi - 如何扩展strapi admin用户属性
- python - 在 django 中使用不同的编码上传两个不同的 Csv 文件
- reactjs - React Router 没有渲染
- python - 如何在不使用 Python 添加新行的情况下更改循环内文件中的行的值?
- c++ - 拆分从 C++ 文件中读取的行
- powershell - Terminal vs PowerShell
- c++ - 为什么我不能让这个数组正确地从文件中提取字符串,它在第一次通过时很好,但是当它循环时它失败了?
- php - Laravel 字符串到 Int 数组