首页 > 解决方案 > 如何区分触摸板产生的WM_MOUSE***消息和鼠标设备产生的消息?

问题描述

我试过GetMessageExtraInfo()在这里提到: 检测 WM_MOUSEMOVE 是否由触摸/笔引起

但它不起作用 -GetMessageExtraInfo()返回0触摸板生成的所有鼠标事件。

在带有集成触摸板的笔记本电脑和带有外部触摸板的台式电脑上进行了尝试。

我也尝试使用 WM_TOUCH 事件,RegisterTouchWindow()WM_GESTURE它们也不起作用 - 我既没有收到也没有收到WM_TOUCH窗口WM_GESTURE上的事件。

基本上我需要的是检测手指何时打开和关闭触摸板。但似乎 WM_TOUCH 或 WM_GESTURE 仅适用于触摸屏,但不适用于触摸板,原因不明。

有什么建议吗?

标签: windowswinapiinputtouch

解决方案


如果您需要能够区分输入源,请考虑使用WM_POINTER*消息而不是旧WM_MOUSE*消息。请注意,这将需要调用EnableMouseInPointer()以接收有关系统认为是鼠标的设备的消息(对于许多基本触摸板来说都是如此)。

WM_MOUSE*消息不同,消息wParam告诉您某些虚拟键的状态,WM_POINTER消息包含足够的信息以能够跟踪输入源。更复杂的是,指针消息不会根据按下的按钮提供单独的消息,但至少该信息仍然可用。


推荐阅读