Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SetWindowshookx WH_MOUSE_LL hooke只需移动一次鼠标_C++_Windows_Mouse_Hook - Fatal编程技术网

C++ SetWindowshookx WH_MOUSE_LL hooke只需移动一次鼠标

C++ SetWindowshookx WH_MOUSE_LL hooke只需移动一次鼠标,c++,windows,mouse,hook,C++,Windows,Mouse,Hook,我正在使用以下代码设置全局钩子: SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0) 我设置了一个断点,以便在第一次运行应用程序时可以看到调用了MouseProc方法。这是可行的,但在第一次之后,它不再被称为。钩子是自动移除的吗?我如何获得它以使钩子自动保持?我正在编写Windows的应用程序,这是一个C++ Win32项目。首先需要做的是: return CallNextHookEx(_hook, nCode, wParam, lParam);

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

SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0)
我设置了一个断点,以便在第一次运行应用程序时可以看到调用了MouseProc方法。这是可行的,但在第一次之后,它不再被称为。钩子是自动移除的吗?我如何获得它以使钩子自动保持?我正在编写Windows的应用程序,这是一个C++ Win32项目。

首先需要做的是:

return CallNextHookEx(_hook, nCode, wParam, lParam);
在您的
MouseProc
中,因此它应该返回

其次,不可能调试大多数有钩子的代码,你的应用程序会崩溃,因为windows希望你的
MouseProc
函数尽快返回。 您的代码还应该具有消息处理代码,如
GetMessage
TranslateMessage
DispatchMessage

示例代码:

我设置了一个断点

这足以解释这个问题。调试器当然会中断。这将阻止进一步的鼠标消息传递到具有焦点的窗口。Windows忍受了5秒钟,然后不客气地禁用了你的钩子,因为它认为你的代码被破坏了


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

请发布MouseProc的代码。您需要传递有效的模块句柄。您可能想说
GetModuleHandle(NULL)
。谢谢您的回答,但我发现断点实际上是导致问题的原因。当你设置断点时,这个钩子似乎被卸载了,在我设置断点之前,它工作得很好。是的,请注意这个答案。我在你发帖子之前就知道了。谢谢你继续解释为什么会这样,我真的很感谢你的帮助。