跟踪鼠标输入事件

Tracking mouse input events

本文关键字:入事件 输入 鼠标 跟踪      更新时间:2023-10-16

当前使用SendInput(MOUSEEVENTF_MOVE)模拟鼠标运动。 在处理之前,SendInput将新的鼠标事件添加到线程输入队列中。

是否可以跟踪/检查是否实际处理了特定事件?

WndProc中跟踪WM_MOUSEMOVE是没有选项的,因为用户可以同时发出未模拟的鼠标运动。

是否可以跟踪/检查是否实际处理了特定事件?

一般:no。

SendInput在处理之前,将新的鼠标事件添加到线程输入队列。

好吧,不。SendInput将输入事件放入硬件输入队列中,在该队列中,它们被原始输入线程拾取,并派遣到相应的线程的输入队列。

WndProc中跟踪WM_MOUSEMOVE是没有选项的,因为用户可以同时发布未模拟的鼠标运动。

正确。但是,您可以安装一个低级鼠标钩,可以在其中识别注入的输入 1 。注射输入具有MSLLHOOKSTRUCT结构的 flags 成员的LLMHF_INJECTEDLLMHF_LOWER_IL_INJECTED标志之一。

一种脆性解决方案,使您可以在应用程序的窗口过程的鼠标消息处理程序中识别注入的输入,是通过鼠标input结构传递特定的 dwextrainfo 值。可以通过调用getMessageExtrainfo在消息处理程序中查询此值。但是,这是不可靠的,因为系统也使用这些值。应用程序无法使用的值范围,可以保证不会与系统使用的值相撞。


1 在输入事件从硬件输入队列中脱水后,低级鼠标钩运行。这些事件尚未通过应用程序处理,甚至没有放在各个线程的输入队列中。