背景
最近在写一个鼠标检测工具,需要记录鼠标的按键、滚轮和回报率等信息。
使用方法
使用鼠标全局钩子,捕获鼠标的信息。
具体实现逻辑
1、创建线程;
2、在线程中,注册全局鼠标钩子;
3、鼠标消息捕获;
4、注销全局钩子;
5、退出线程。
核心代码
1、获取线程id
m_threadID = GetCurrentThreadId();
2、注册钩子
m_hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
3、捕获消息
GetMessage(&msg, NULL, 0, 0);//这里会一直阻塞
4、消息处理
LRESULT NormalMouse::MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0 && wParam == WM_LBUTTONDOWN) {
// 左键按下事件
printf(“左键被按下\n”);
} else if (nCode >= 0 && wParam == WM_LBUTTONUP) {
// 右键按下事件
printf(“左键抬起\n”);
}
// 继续传递事件给下一个钩子或目标窗口
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
5、通知GetMessage退出
PostThreadMessage(m_threadID, WM_QUIT, 0, 0);