2016-08-17 2 views
3

В настоящее время я могу вставлять входы клавиатуры, когда программа не находится в фокусе с использованием этого решения.Глобальный ввод перехвата клавиатуры

Using global keyboard hook (WH_KEYBOARD_LL) in WPF/C#

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

Я добавил следующее, но символы все еще добавлены в блокнот.

if (nCode >= 0) 
{ 
    if (wParam == (IntPtr)InterceptKeys.WM_KEYDOWN) 
    { 
     int vkCode = Marshal.ReadInt32(lParam); 
     RawKeyEventArgs rk = new RawKeyEventArgs(vkCode, false);      

     if (KeyDown != null) 
     KeyDown(this, rk); 
     if (rk.isHandled) 
     { 
     return (IntPtr)0; 
     } 
    } 
} 

return InterceptKeys.CallNextHookEx(hookId, nCode, wParam, lParam); 

Является ли возвращение предполагаемым чем-то другим?

ответ

1

EDIT - Я искал неправильное сообщение, поэтому я удаляю весь старый ответ.

Это кажется правильной функцией обратного вызова LowLevelKeyboardProc callback function. Это то, что он говорит для возвращаемого значения:

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

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

Так что возвращение ничего, кроме нуля, должно работать.

+0

Я добавил изменения в вопрос, было ли правильное возвращение? Я проверил в отладке, и он определенно использовал return под isHandled. – JacoT

+0

Я искал неправильное место. Надеюсь, это поможет. –

+0

работал как шарм. – JacoT

Смежные вопросы