带Alt+Tab键的WH_KEYBOARD停止工作
本文关键字:KEYBOARD 停止工作 WH Alt+Tab 键的 | 更新日期: 2023-09-27 18:20:02
当我设置非全局WH_KEYBOARD钩子时,它工作正常,所有键都被捕获。但如果我按下Alt+Tab键,然后返回窗口,钩子会毫无理由地停止工作。这是我的钩子进程,我试图阻止id=root的进程的所有键盘消息:
private static IntPtr HookCallback (int nCode, IntPtr wParam, IntPtr lParam)
{
var proc = 0u;
GetWindowThreadProcessId(GetForegroundWindow(), out proc);
if (proc != root) return CallNextHookEx(hooks[0], nCode, wParam, lParam);
return new IntPtr(1);
}
对于开发,我在VirtualBox中使用32位Windows。
更新:它也不依赖于阻塞或将参数传递给下一个钩子:不做任何事情然后调用下一个挂钩的代码变体在Alt+Tab之后也停止工作。如果没有使用Alt+Tab键,失去焦点并激活窗口不会停止挂钩。
在查找了一些示例并分析了我的代码后,我发现了如何解决这个"bug"。我应该这样设置SetWindowsHookEx函数中的最后两个参数:
SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback,
IntPtr.Zero, GetCurrentThreadId());
但不是这样的:
SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback,
GetModuleHandle(curModule.ModuleName), 0);