GET_X_LPARAM给出了负值

我为鼠标创build了一个钩子。 我想获得鼠标点击坐标,但是GET_X_LPARAM()给了我负值(当点击不同的地方时总是相同的)。 我的问题用GetCursorPos()解决了,但是我想知道为什么它不能和GET_X_LPARAM / GET_Y_LPARAM一起工作。 代码如下:

LRESULT CALLBACK Recorder::mouseHook( int code, WPARAM wParam, LPARAM lParam ) { if( code < 0 ) return CallNextHookEx( m_mouseHook, code, wParam, lParam ); switch( wParam ) { case WM_LBUTTONDOWN:{ int _hereIsANegativeNumber = GET_X_LPARAM( lParam ); break;} } return CallNextHookEx( 0, code, wParam, lParam ); } 

这是我如何设置钩子:

 m_mouseHook = SetWindowsHookEx( WH_MOUSE_LL, &mouseHook, GetModuleHandle( NULL ), 0 ); 

WH_MOUSE_LL钩子中, lParam不是鼠标的坐标 – 而是一个指向MSLLHOOKSTRUCT的指针。

所以,要获得坐标:

 POINT pt = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)->pt; 

有关更多详细信息,请参阅LowLevelMouseProc 。

因为对于LowLevelMouseProc过程中的WH_MOUSE_LL ,您获得的LPARAM变量是指向MSLLHOOKSTRUCT结构的指针,并使用它的pt成员来获取鼠标坐标