【发布时间】:2013-11-15 18:02:12
【问题描述】:
类似于this unanswered question,我们使用SendInput / mouse_event / SetCursorPos 以编程方式移动鼠标并发送鼠标点击。我们还想使用WH_MOUSE_LL windows hooks 捕获机器上的所有鼠标事件。我们使用MSLLHOOKSTRUCT,其中包含一个专门用于识别注入鼠标事件的标志属性。然而,我们的回调永远不会被注入事件调用。
var threadId = 0U;
var moduleHandle = GetModuleHandle("user32");
IntPtr hookId = SetWindowsHookEx(WH_MOUSE_LL, ourCallback, moduleHandle, threadId);
if (hookId == IntPtr.Zero)
{
log.Error("Could not start getting global mouse messages.");
throw new System.ComponentModel.Win32Exception();
}
我们的 hookId 永远不会是 IntPtr.Zero 并使用 UnhookWindowsHookEx 成功删除它意味着钩子确实存在。
为什么我们没有收到SendInput / mouse_event / SetCursorPos 生成的事件?
【问题讨论】:
-
使用所有三种方法来移动鼠标几乎没有意义。这使得您很可能实际上只是在使用 SetCursorPos(),它确实不会触发钩子。
-
我们不使用所有三个,但我们已经尝试了所有三个。我们一次只使用一个哈哈,如果不清楚,对不起!
标签: c# .net winapi mouseevent hook