全局键盘拦截输入

Global Keyboard intercept input

我目前可以使用此解决方案在程序未处于焦点时捕获键盘输入。

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);

return 应该有所不同吗?

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

这似乎是正确的回调函数LowLevelKeyboardProc callback function。这就是 return 值的含义:

如果 nCode 小于零,则挂钩过程必须 return 由 CallNextHookEx 编辑的值 return。

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

所以 return除了零之外的任何东西都应该有效。