Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771

Перехват событий клавиатуры и мыши в одном хуке

20.11.2021, 17:26. Показов 1972. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю библиотеку для операционной системы Windows, которая должна будет получать сообщения мыши и клавиатуры от определенного потока. Не могу определиться с тем, какой тип хука больше всего подходит под эту задачу. Сначала думал на WH_CALLWNDPROC, но, как оказалось, он не получает сообщения клавиатуры. Потом выбор пал на WH_GETMESSAGE. Я проверил, он получает как сообщения мыши так и сообщения клавиатуры, однако, определить какая клавиша клавиатуры была нажата я так и не смог. При нажатии левого и правого шифта, если смотреть на структуру MSG в wParam, выводит одну и ту же цифру.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
LRESULT CALLBACK messageHandler(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0)
    {
        return CallNextHookEx(hookHandle, nCode, wParam, lParam);
    }
    
    MSG* pMSG = reinterpret_cast<MSG*>(lParam);
 
    switch (pMSG->message)
    {
        case WM_KEYUP:
        {
            cout << pMSG->wParam << endl;
        }
 
        break;
    }
 
    return CallNextHookEx(hookHandle, nCode, wParam, lParam);
}
 
DWORD WINAPI messageDispatcher(LPVOID thread)
{
    hookHandle = SetWindowsHookEx(WH_GETMESSAGE, messageHandler, GetModuleHandle(nullptr), *reinterpret_cast<DWORD*>(thread));
 
    if (!hookHandle)
    {
        return GetLastError();
    }
 
    MSG message{};
 
    while (GetMessage(&message, 0, 0, 0) > 0)
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
 
    return 0;
}
Собственно вопроса всего два:
  1. Какой хук больше всего подходит для отлова событий как клавиатуры так и мыши?
  2. Как в текущем коде определить что был нажат именно VK_RSHIFT?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2021, 17:26
Ответы с готовыми решениями:

Перехват событий клавиатуры и мыши
Привет всем. Пишу проект связаный с перехватом событий клавиатуры и мыши (использую QT 4.6), вернее сказать подсчёт нажатых клавиш . Под...

Перехват событий мыши
Здравствуйте,скажите как можно перехватить события мыши в какую либо переменную, чтобы использовать её потом как параметр для какой либо...

Перехват событий мыши
Добрый день! Хочу написать программу по управлению громкостью с помощью мыши. Задача заключается в том, что нужно увеличить громкость, если...

1
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
26.11.2021, 00:17  [ТС]
Собственно, ответ на второй пункт в моём же вопросе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (pMSG->message)
{
    case WM_KEYUP:
    {
        switch (pMSG->wParam)
        {
            case VK_SHIFT:
            {
                // Здесь нужно сравнить pMSG->lParam у правого шифта он равен 3224764417
            }
 
            break;
        }
    }
 
    break;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2021, 00:17
Помогаю со студенческими работами здесь

Перехват глобальных событий мыши
Всем привет. У меня на форме есть listview, который отображает файлы хранящиеся на сервере. Необходимо чтобы пользователь имел возможность...

Перехват событий клавиатуры
Можно ли на яве вообще перехватить события клавиатуры? Необходимо чтобы приложение сидело в треере, ожидало необходимую комбинацию...

Перехват событий с клавиатуры
Добрый день! Как заставить диалоговое окно перехватывать события нажатия клавиатуры? Пытался WM_KEYDOWN, ни чего получается, по нажатии...

Перехват всех событий клавиатуры
Доброго времени суток, возникла задача полного перехвата всех нажатий клавиатуры в linux, как в screensaver'ах, в каком направлении стоит...

Реализовать перехват событий клавиатуры (хуки)
Здравствуйте Уважаемые форумчане.Несколько дней бьюсь с проблемой,и решил попросить Вас помочь с ее решением. Проблема следующая:Я сделал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru