我正在尝试创建一个简单的鼠标钩子来检测鼠标是否在移动,但出于某种原因,当我运行程序时,鼠标根本不起作用,直到我停止该过程。
这是我的代码:
#include <windows.h>
HHOOK g_hMouse;
LRESULT CALLBACK MouseHook(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("MOUSE EVENT!\n");
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseHook, NULL, NULL);
while (1) {
Sleep(2);
}
return 0;
}
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:3)
WM_MOUSE_LL
挂钩要求安装它的线程保持消息;所以你在这里需要一个GetMessage / DispatchMessage循环。有关详细信息,请参阅WM_MOUSE_LL的MSDN文档:
在安装它的线程的上下文中调用此钩子。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。
如果您只是想在尝试/调试时尝试快速尝试,请调用MessageBox(...)
调用Sleep(),这将阻止您的代码以便您可以进行测试,但它会运行自己的消息循环,所以钩子会运行。