Как узнать нажата XBUTTON1 или XBUTTON2?

166
05 ноября 2018, 20:20

Есть хук, который отслеживает нажатие WM_XBUTTONDOWN и WM_XBUTTONUP. Мне необходимо понять какая именно боковая кнопка мыши нажата (1-я или 2-я). Использую следующий код.

LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_XBUTTONDOWN || wParam == WM_XBUTTONUP)
        {
            GET_XBUTTON_WPARAM(wParam); // result = 0
            MOUSEHOOKSTRUCTEX* mouseStruct = (MOUSEHOOKSTRUCTEX*)lParam;
            mouseStruct->mouseData;// result = 0
            return -1;
        }
    }
    return CallNextHookEx(myHook, nCode, wParam, lParam);
}

Но и GET_XBUTTON_WPARAM(wParam), и структура mouseStruct->mouseData возвращают 0.

Что я делаю не так и почему они возвращают всегда 0? Как исправить данную проблему?

Answer 1

Почему вы используете MOUSEHOOKSTRUCTEX? В обработчик WH_MOUSE_LL вам передается указатель на MSLLHOOKSTRUCT. Поэтому

const MSLLHOOKSTRUCT *mouseStruct = (const MSLLHOOKSTRUCT *) lParam;

и вот там уже смотрим в mouseData.

Для WM_XBUTTONDOWN значения XBUTTON1 или XBUTTON2 должны передаваться в HIWORD(mouseStruct->mouseData).

READ ALSO
В какой виджет выводятся текст, картинки, видео?

В какой виджет выводятся текст, картинки, видео?

Например в мессенджерах можно писать текст, вставлять картинки, вставлять может быть видеоНо в какой виджет это всё вставляется я не пойму?...

173
одновременная работа с std::wcout и std::cout

одновременная работа с std::wcout и std::cout

Все примеры я запускаю в такой main ф-ии:

184
Десериализация JSON ответа

Десериализация JSON ответа

Пытаюсь десериализовать JSON ответ с помощью GSON через response ResponseFio = gsonfromJson(json, response

214
Как решить эту задачу?

Как решить эту задачу?

Добрый день решил изучить алгоритмы и делаю задачи из книги , но вот с этой задачей сломал голову Условия

221