4
MSG msg;

LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
  if (nCode >= 0) {
    if (wParam == WM_MOUSEWHEEL) cout << GET_WHEEL_DELTA_WPARAM(wParam) << endl; //prints 0
  }
  return CallNextHookEx(0, nCode, wParam, lParam);
}

bool get_state(){
    if(GetMessage(&msg,GetActiveWindow(), 0, 0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

int main()
{
    HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0);
    while(true){
        get_state();
    }
    UnhookWindowsHookEx(mousehook);
    return 0;
}

我在这个线程中找到了一个鼠标钩子,它可以工作,但是当我尝试检查鼠标滚轮的状态(是向前还是向后移动)时,获取移动的函数总是返回 0。

我是否调用了 GET_WHEEL_DELTA_WPARAM(wParam) 错误?还是我使用钩子的方式与 GET_WHEEL_DELTA_WPARAM(wParam) 函数不兼容?

我发现的另一个线程有代码从名为 MOUSEHOOKSTRUCTEX 的结构中获取 mouseData(这可能允许我获取我正在寻找的移动值),但是当我尝试编译时,我收到错误“'MOUSEHOOKSTRUCTEX' is not declared在这个范围内”。

请注意,此代码已被剥离以隔离问题,因此请原谅奇怪的部分,例如 while 循环不受阻碍地运行。

解决方法是使用以下方法获得运动:

MSLLHOOKSTRUCT *pMhs = (MSLLHOOKSTRUCT *)lParam;
short zDelta            = HIWORD(pMhs->mouseData);

在 MouseHookProc 函数中。

用户克里斯给出的答案

4

0 回答 0