MouseHook以检测鼠标何时移动

时间:2015-01-13 23:22:26

标签: c++ winapi

我正在尝试创建一个简单的鼠标钩子来检测鼠标是否在移动,但出于某种原因,当我运行程序时,鼠标根本不起作用,直到我停止该过程。

这是我的代码:

#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;
}

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:3)

WM_MOUSE_LL挂钩要求安装它的线程保持消息;所以你在这里需要一个GetMessage / DispatchMessage循环。有关详细信息,请参阅WM_MOUSE_LL的MSDN文档:

  

在安装它的线程的上下文中调用此钩子。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。

如果您只是想在尝试/调试时尝试快速尝试,请调用MessageBox(...)调用Sleep(),这将阻止您的代码以便您可以进行测试,但它会运行自己的消息循环,所以钩子会运行。