如何区分触摸板生成的消息和鼠标设备生成的 WM_MOUSE*** 消息?

How to distinguish WM_MOUSE*** messages generated by touch pad from generated by mouse device?

我试过 GetMessageExtraInfo() 这里提到的: Detect if WM_MOUSEMOVE is caused by touch/pen

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

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

我还尝试将 WM_TOUCH 事件与 RegisterTouchWindow()WM_GESTURE 一起使用,但它们也不起作用 - 我既没有收到 WM_TOUCH 也没有收到 WM_GESTURE window.

上的事件

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

有什么建议吗?

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

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