全局键盘截取输入

雅各

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

在WPF / C#中使用全局键盘挂钩(WH_KEYBOARD_LL)

但是,我想知道如果它符合特定条件,是否可以阻止其他应用程序使用输入,我想使用它在后台运行程序时将条形码捕获到我的程序中,但是如果您正在使用记事本中,最好不要在该处也键入条形码。

我添加了以下内容,但字符也仍添加到了记事本中。

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

收益是否应该有所不同?

鲁舍夫

编辑-我正在看错消息,因此我删除了整个旧答案。

这似乎是正确的回调函数LowLevelKeyboardProc回调函数这就是返回值的含义:

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

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

因此,返回零以外的任何东西都应该起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章