全局键盘拦截输入

时间:2016-08-17 10:18:36

标签: c# wpf keyboard hook barcode-scanner

我目前能够使用此解决方案在程序未对焦时捕获键盘输入。

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 个答案:

答案 0 :(得分:1)

编辑 - 我看到了错误的信息,所以我删除了整个旧答案。

这似乎是正确的回调函数LowLevelKeyboardProc callback function。这就是它对返回值所说的内容:

如果nCode小于零,则钩子过程必须返回CallNextHookEx返回的值。

如果nCode大于或等于零,并且钩子程序没有处理该消息,强烈建议您调用CallNextHookEx并返回它返回的值;否则,安装了WH_KEYBOARD_LL挂钩的其他应用程序将不会收到挂钩通知,因此可能会出现错误行为。 如果挂钩过程处理了消息,它可能会返回非零值,以防止系统将消息传递给挂钩链的其余部分或目标窗口过程。

所以返回零以外的任何东西都应该有用。