4

我为鼠标创建了一个钩子。我想获得鼠标点击坐标,但是 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 );
4

2 回答 2

7

WH_MOUSE_LL钩子中,lParam不是鼠标坐标,而是指向MSLLHOOKSTRUCT.

因此,要获取坐标:

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

有关详细信息,请参阅LowLevelMouseProc

于 2012-09-03T06:35:28.983 回答
3

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

于 2012-09-03T06:37:08.820 回答