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' は宣言されていませんでした」というエラーが表示されます。この範囲で」。

このコードは問題を特定するために削除されていることに注意してください。

修正は、次を使用して動きを取得することです。

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

MouseHookProc 関数内。

ユーザー chrisからの回答

4

0 に答える 0