GET_WHEEL_DELTA_WPARAM (wParam) в ловушке мыши, возвращающей 0

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)?

Другая тема Я обнаружил, что есть код для получения mouseData (который может позволить мне получить искомое значение движения) из структуры с именем MOUSEHOOKSTRUCTEX, но когда я пытаюсь скомпилировать, я получаю ошибку «‘MOUSEHOOKSTRUCTEX’ не был объявлен в этом объем».

Обратите внимание, что этот код сокращен, чтобы изолировать проблему, поэтому, пожалуйста, простите нечетные части, такие как цикл while, работающий беспрепятственно.

Исправление состоит в том, чтобы получить движение, используя:

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

В функции MouseHookProc.

Ответ дан пользователь chris

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]