Могу ли я использовать Global Hooks и Raw Input одновременно?
Я пытался использовать Global Hooks, используя SetWindowsHookEx
чтобы получить все нажатия клавиш.
Проблема в том, что я не могу использовать Global Hooks и Raw Input одновременно.
Я думаю, здесь должна быть какая-то проблема, потому что глобальные перехватчики автоматически отключаются после того, как я включаю необработанные входы.
2 ответа
Кто тебе сказал, что их нужно использовать вместе? Если ваше приложение зарегистрировано для обработки необработанного ввода, нет абсолютно никакой причины для установки глобальной ловушки. Весь смысл модели необработанного ввода состоит в том, что приложение получает уведомление и обрабатывает необработанный ввод от любого HID, подключенного к компьютеру.
Скорее вы слушаете WM_INPUT
сообщение, которое отправляется в очередь сообщений приложения для любого HID, который вы зарегистрировали, вызвав RegisterRawInputDevices
функция После получения этого сообщения ваша заявка должна позвонить GetRawInputData
функция с использованием RAWINPUT
ручка содержится в lParam
параметр WM_INPUT
сообщение. Пример кода доступен здесь.
Кроме того, вы можете выполнить буферизованное чтение необработанных данных. Это более полезно для устройств, которые генерируют большое количество входных данных одновременно. При таком подходе вы называете GetRawInputBuffer
функция, которая возвращает массив RAWINPUT
структур. Опять же, образец кода доступен здесь.
Актуальная информация о функциях Raw Input находится здесь, на MSDN.
Вам не нужен хук для необработанного ввода, который уже проверен обратным вызовом LRESULT WindowProcedure. Вам просто нужно получить информацию, если устройство использовалось, например, mouse_pos, mouse_click (и количество кликов, которое вы можете определить по счетчику), key_input и т. Д.