C++ WM_MOUSEMOVE GET_X_LPARAM和GET_Y_LPARAM捕捉错误的坐标 LRESULT回调MouseProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM) { 如果(nCode==HC\U动作) { if(wParam==WM\u MOUSEMOVE) { cout
MouseProc的C++ WM_MOUSEMOVE GET_X_LPARAM和GET_Y_LPARAM捕捉错误的坐标 LRESULT回调MouseProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM) { 如果(nCode==HC\U动作) { if(wParam==WM\u MOUSEMOVE) { cout,c++,winapi,hook,mousemove,C++,Winapi,Hook,Mousemove,MouseProc的lParam参数与WM\u MOUSEMOVE的lParam参数不同。它是一个MOUSEHOOKSTRUCT* 因此,将MouseProc更改为: LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { if (wParam == WM_MOUSEMOVE) { cout
lParam
参数与WM\u MOUSEMOVE
的lParam
参数不同。它是一个MOUSEHOOKSTRUCT*
因此,将MouseProc
更改为:
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;
}
LRESULT回调MouseProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
如果(nCode==HC\U动作)
{
auto&ms=*(const MOUSEHOOKSTRUCT*)lParam;
if(wParam==WM\u MOUSEMOVE)
{
您有多少个监视器?我只有一个监视器。您需要将lParam转换为MOUSEHOOKSTRUCT指针,因为您设置为WH_MOUSE_LL。这个钩子类型的安装钩子过程,回调中的lParam是数据结构的指针,您可以在MSDN中看到,在MSDN中,lParam是“指向MSLLHOOKSTRUCT结构的指针”
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
auto &ms = * (const MOUSEHOOKSTRUCT *) lParam;
if (wParam == WM_MOUSEMOVE)
{
cout << "X : " << ms.pt.x << " Y: " << ms.pt.y << "\n";
}
}
return CallNextHookEx(hMSHook, nCode, wParam, lParam);
}