2016-08-17 85 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

編輯 - 我正在看錯誤的消息,似乎所以我刪除了舊的答案的全部。

這似乎是正確的回調函數LowLevelKeyboardProc callback function。這就是它返回的值:

如果nCode小於零,掛鉤過程必須返回CallNextHookEx返回的值。

如果nCode大於或等於零,並且掛鉤過程沒有處理該消息,強烈建議您調用CallNextHookEx並返回它返回的值;否則,已安裝WH_KEYBOARD_LL掛鉤的其他應用程序將不會收到掛接通知,並可能因此導致行爲不正確。 如果鉤子過程處理了消息,它可能會返回一個非零值,以防止系統將消息傳遞給鉤子鏈或目標窗口過程的其餘部分。

因此,返回任何東西,但零應該工作。

+0

我已經添加了對問題的更改,是否正確的返回?我檢查了調試,並確定使用isHandled下的返回。 – JacoT

+0

我在看錯了地方。編輯希望它有幫助。 –

+0

像一個魅力工作。 – JacoT