2017-06-06 75 views
0

当前使用SendInput(MOUSEEVENTF_MOVE)来模拟鼠标移动。 SendInput在处理之前向线程输入队列中添加一个新的鼠标事件。跟踪鼠标输入事件

是否有可能跟踪/检查某个特定事件是否已实际处理?

跟踪WM_MOUSEMOVEWndProc是没有选择的,因为用户可能同时发出非模拟的鼠标移动。

回答

0

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

一般来说:号

SendInput处理之前增加了一个新的鼠标事件,以线程输入队列。

那么,没有。 SendInput将输入事件放置到硬件输入队列中,在那里它们被原始输入线程拾取并分派到各个线程的输入队列。

跟踪在WndProcWM_MOUSEMOVE没有选择,因为它有可能为用户发出的同时非模拟鼠标的移动。

正确。但是,您可以安装low-level mouse hook,您可以在其中识别注入的输入。注入的输入有LLMHF_INJECTEDLLMHF_LOWER_IL_INJECTED标志中的一个设置在MSLLHOOKSTRUCT结构的标志成员中。

脆性解决方案,允许您识别在应用程序的窗口过程的鼠标消息处理程序注入输入是通过MOUSEINPUT结构传递一个特定dwExtraInfo值。通过调用GetMessageExtraInfo可以在消息处理程序中查询此值。但这并不可靠,因为系统也使用这些值。应用程序无法使用的值范围不会超过系统使用的值。


低级鼠标钩子运行,之后输入事件从硬件输入队列中出列。这些事件并没有被应用程序处理,甚至没有被放置到那个点的各个线程的输入队列中。