Хотите остановить данные, поступающие в ОС / приложение после чтения с помощью SetWindowsHookEx - PullRequest
0 голосов
/ 03 октября 2011

Я занимаюсь разработкой одного простого приложения, которое считывает нажатия клавиш из ОС.Я использовал API «SetWindowsHookEx» для чтения данных нажатия клавиш.

В настоящее время данные считываются с помощью крючка, а также отправляются в ОС или приложение.

Я хочу, чтобы эти данные не поступалиОС или другие приложения.Есть ли способ остановить данные, поступающие в ОС Windows 7 после их чтения с помощью «SetWindowsHookEx»?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2016

Если вы используете «нормальную» зацепку для клавиатуры, вы найдете ответ на https://msdn.microsoft.com/en-us/ms644984.aspx:

Если код меньше нуля, процедура перехвата должна вернуть значение, возвращенное CallNextHookEx.

Если код больше или равен нулю и процедура подключения не обработала сообщение, настоятельно рекомендуется вызвать CallNextHookEx и вернуть возвращаемое значение;в противном случае другие приложения, которые установили хуки WH_KEYBOARD, не будут получать уведомления о хуках и в результате могут работать неправильно.Если процедура подключения обработала сообщение, она может вернуть ненулевое значение, чтобы система не могла передать сообщение остальной части цепочки подключения или процедуре целевого окна.

Если вы используете низкий уровеньловушка клавиатуры уровня записана на https://msdn.microsoft.com/en-us/ms644985.aspx:

Если nCode меньше нуля, процедура ловушки должна вернуть значение, возвращаемое CallNextHookEx.

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

Сводка:

Если вы хотите перехватить сообщение - не вызывайте CallNextHookEx и возвращайте ненулевое значение, чтобы оно не передавалось по цепочке.

0 голосов
/ 03 октября 2011

Как правило, чтобы предотвратить перемещение какого-либо сообщения к его цели, не вызывайте CallNextHookEx из функции обратного вызова ловушки. По умолчанию перехватывать обратный вызов вызывает CallNextHookEx.

Будьте осторожны с этой функцией и останавливайте только некоторые конкретные сообщения. Например, иногда эта функция вызывается для отключения некоторых стандартных клавиш, таких как Alt + F4, Alt + Tab и т. Д.

...