Есть ли лучший способ контролировать нажатия клавиш, чем системный хук WH_CBT? - PullRequest
2 голосов
/ 13 февраля 2012

В настоящее время я изучаю хороший надежный способ регистрации действий пользователя на компьютере.Я создал простое приложение, которое перехватывает события WH_CBT по всему миру, и пока оно работает нормально.Я читал о ситуациях, когда у приложения был бы собственный обработчик событий WH_CBT, и он не вызывал бы функцию CallNextHookEx() после его обработки.Я предполагаю, что этот сценарий не позволит мне обрабатывать какие-либо события в этом приложении самостоятельно с помощью системного хука.

Есть ли другой (возможно, лучший) способ перехвата событий нажатия клавиш в приложениях?Возможно, что-то связано с ручным внедрением DLL в такие процессы:

  1. Pick process.
  2. Внедрение DLL с использованием CreateRemoteThreadEx().
  3. DLL-хуков (обходных путей)Winapi функционирует и собирает от них информацию о нажатиях клавиш или других событиях.

Достаточно ли будет в этом случае перехватывать функции GetMessage() или TranslateMessage()?Прав ли я, что любой процесс, использующий цикл сообщений, должен использовать эти функции для обработки событий для созданных окон?

1 Ответ

1 голос
/ 13 февраля 2012

Лучше было бы использовать перехват клавиатуры низкого уровня, используя WH_KEYBOARD_LL (так как он захватил бы все), но существуют и другие более конкретные решения, такие как подклассификация окна родительского уровня любого приложения, которое вы используете нацеливание на захват ключевых оконных сообщений, что исключает необходимость вмешательства в код или фильтрации в масштабе всей системы.

Возвращаясь к более глобальной области, вы также можете сделать это, используя хуки на основе WH_KEYBOARD, WH_CALLWNDPROC или WH_GETMESSAGE, что может быть сделано глобально или на уровне потока. Все зависит от того, что и сколько вы пытаетесь захватить.

...