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