Могу ли я использовать 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 и т. Д.

Другие вопросы по тегам