Хук клавиатуры работает только в процессе вызова - PullRequest
0 голосов
/ 18 января 2011

Я делаю программу VoIP, в которой я использую клавиатуру, чтобы проверить, нажата ли кнопка «нажми и говори».Он работает локально из процесса, который устанавливает хук, но моя цель состоит в том, чтобы он также проверял весь глобальный ввод.Вот что я использую:

SetWindowsHookEx(WH_KEYBOARD,hook_hookproc,hookInst,0);

Согласно MSDN и другим источникам, мне нужно внедрить мою подключаемую DLL во все другие процессы ... что было бы больно, и я сомневаюсь, что ventrilo / teampeak и т. Д. Делают это.Можно ли внедрить его в системный процесс, и тогда все дочерние процессы (все) наследуют вызов ловушки таким образом?Или вам нужно внедрить его в каждый процесс?

ура

1 Ответ

3 голосов
/ 18 января 2011

Глобальный хук, такой как WH_KEYBOARD, действительно требует DLL, которую можно внедрить.Обычно вам нужно добавить код IPC, чтобы рассказать об этом кому-то другому.Остерегайтесь того, что вы пересекаете границу процесса, выполняя это, поэтому вам нужно что-то вроде канала для разговора.

Рассматривали ли вы использование низкоуровневой клавиатуры (WH_KEYBOARD_LL).Для этого не требуется инъекционная DLL, Windows переключает контекст в ваш процесс для вызова ловушки.Это почти всегда достаточно, чтобы обнаружить определенное нажатие клавиши, возможно, в сочетании с GetAsyncKeyState (), чтобы проверить наличие клавиш-модификаторов.

Горячая клавиша, зарегистрированная в RegisterHotKey (), может также работать.Это должен быть ваш первый выбор, поскольку он оказывает гораздо меньшее влияние на машину.

...