【发布时间】:2018-06-05 03:30:51
【问题描述】:
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (wParam == WM_MOUSEMOVE)
{
cout << "X : " << GET_X_LPARAM(lParam) << " Y: " << GET_Y_LPARAM(lParam) << "\n";
}
}
return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}
int _tmain() {
HMODULE hInstance = GetModuleHandle(NULL);
hMSHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hInstance, NULL);
MSG Msg;
while (GetMessage(&Msg, NULL, 0, 0)) { DispatchMessage(&Msg); }
::ReleaseDC(0, dc);
return 0;
}
result = 总是返回错误的坐标,
示例 = X = -1844,Y = 79,
X = -1556 Y = 271,
X = -1028 Y = 91
...
每次发布时价值都会发生变化
有人可以帮助我吗?
【问题讨论】:
-
你有多少台显示器?
-
我只有一台显示器
-
您需要将 lParam 转换为 MOUSEHOOKSTRUCT 指针,因为您设置为 WH_MOUSE_LL。这个钩子类型安装钩子程序,回调中的lparam是数据结构的指针
-
msdn.microsoft.com/library/windows/desktop/… 你可以在 MSDN 中看到,在 MSDN 中,lparam 是“指向 MSLLHOOKSTRUCT 结构的指针。”