我目前能够使用此解决方案在程序未对焦时捕获键盘输入。
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);
回报应该是不同的吗?
答案 0 :(得分:1)
编辑 - 我看到了错误的信息,所以我删除了整个旧答案。
这似乎是正确的回调函数LowLevelKeyboardProc callback function。这就是它对返回值所说的内容:
如果nCode小于零,则钩子过程必须返回CallNextHookEx返回的值。
如果nCode大于或等于零,并且钩子程序没有处理该消息,强烈建议您调用CallNextHookEx并返回它返回的值;否则,安装了WH_KEYBOARD_LL挂钩的其他应用程序将不会收到挂钩通知,因此可能会出现错误行为。 如果挂钩过程处理了消息,它可能会返回非零值,以防止系统将消息传递给挂钩链的其余部分或目标窗口过程。
所以返回零以外的任何东西都应该有用。