Есть ли лучший способ отслеживать нажатия клавиш, чем системный хук WH_CBT?

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

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

  1. Процесс выбора.
  2. Внедрить DLL с помощью CreateRemoteThreadEx().
  3. DLL перехватывает (обходит) некоторые функции winapi и собирает от них информацию о нажатиях клавиш или других событиях.

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


person blackd0t    schedule 13.02.2012    source источник
comment
Это странная паранойя в этом вопросе. Конечно, вы не можете защитить себя от плохого поведения другой проститутки. Так же, как вы не можете защитить себя от того, что пользователь удалит ваш. Она оставит ваш код на месте и удалит другие, когда у нее будет веская причина полагать, что ваш код полезен. Чем агрессивнее ваш код, тем меньше вероятность, что она будет убеждена.   -  person Hans Passant    schedule 13.02.2012
comment
Ты прав. Я просто хотел убедиться, что плохое поведение проституток не является чем-то обычным, к чему я должен готовиться. Ссылаясь на проститутку как на девушку, она заставила меня улыбнуться :)   -  person blackd0t    schedule 14.02.2012


Ответы (1)


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

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

person Necrolis    schedule 13.02.2012