Могу ли я использовать Global Hooks и Raw Input одновременно? - PullRequest
2 голосов
/ 13 апреля 2011

Я пытался использовать Global Hooks, используя SetWindowsHookEx, чтобы получить все нажатия клавиш.

Проблема в том, что я не могу использовать глобальные зацепки и необработанный ввод одновременно.

Я думаю, здесь должна быть какая-то проблема, потому что глобальные перехватчики автоматически отключаются после того, как я включаю необработанные входы.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Кто сказал вам, что их нужно использовать вместе? Если ваше приложение зарегистрировано для обработки необработанного ввода, нет абсолютно никаких причин для установки глобальной ловушки. Весь смысл модели необработанного ввода состоит в том, что приложение получает уведомление и обрабатывает необработанный ввод от любого HID, подключенного к компьютеру.

Скорее, вы слушаете сообщение WM_INPUT , которое отправляется в очередь сообщений приложения для любого зарегистрированного HID, вызывая функцию RegisterRawInputDevices . После получения этого сообщения ваше приложение должно вызвать функцию GetRawInputData , используя дескриптор RAWINPUT, содержащийся в параметре lParam сообщения WM_INPUT. Пример кода доступен здесь .

Кроме того, вы можете выполнить буферизованное чтение необработанных данных. Это более полезно для устройств, которые генерируют большое количество входных данных одновременно. При таком подходе вы вызываете функцию GetRawInputBuffer , которая возвращает массив структур RAWINPUT. Снова, образец кода доступен здесь .

Актуальное чтение для функций необработанного ввода - здесь, в MSDN .

1 голос
/ 24 ноября 2011

Вам не нужен перехват для необработанного ввода, который уже проверен обратным вызовом LRESULT WindowProcedure. Вам просто нужно получить информацию, если устройство использовалось, например, mouse_pos, mouse_click (и количество кликов, которое вы можете определить по счетчику), key_input и т. Д. *

...