SetWindowsHookEx WH_MOUSE_LL Hook只需1个鼠标移动

时间:2014-01-07 15:46:11

标签: c++ windows mouse hook

我使用以下代码设置全局钩子:

SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0)

我设置了一个断点,这样当我第一次运行应用程序时,我可以看到调用了MouseProc方法。这有效但在第一次不再被调用之后。是否自动删除了Hook,如何获取此钩子以便钩子自动保留?我正在为windows编写这个应用程序,这是一个C ++ win32项目。

2 个答案:

答案 0 :(得分:6)

  

我有一个断点设置

这足以解释这个问题。调试器当然会中断。这样可以防止将更多鼠标消息传递到具有焦点的窗口。 Windows提示5秒,然后毫不客气地禁用你的钩子,因为它认为你的代码坏了。

超时是可配置的,您可以使用Regedit.exe设置HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout值。默认情况下不存在,首先添加DWORD值。单位是毫秒。

答案 1 :(得分:3)

首先你需要做:

return CallNextHookEx(_hook, nCode, wParam, lParam);

在你的MouseProc中,所以应该返回。

其次,无法调试大多数具有挂钩的代码,您的应用程序将崩溃,因为Windows希望您的MouseProc函数尽快返回并返回。 您的代码也应该包含消息处理代码,例如GetMessageTranslateMessageDispatchMessage

示例代码:SetWindowsHookEx for WH_MOUSE

相关问题