使用Alt + Tab的WH_KEYBOARD停止工作

时间:2013-06-27 09:58:11

标签: c# c++ windows hook

当我设置非全局WH_KEYBOARD挂钩时,它工作正常并且所有键都被捕获。但是,如果我按Alt + Tab然后返回到窗口,钩子会无缘无故地停止工作。 这是我的钩子proc,我试图用id = root:

阻止proccess的所有键盘消息
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,则丢失焦点并激活窗口不会停止挂钩。

1 个答案:

答案 0 :(得分:1)

在寻找一些样本并分析我的代码后,我发现了如何解决这个“bug”。我应该以这种方式在SetWindowsHookEx函数中设置最后两个参数:

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
                 IntPtr.Zero, GetCurrentThreadId());

但不是这样的:

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
                 GetModuleHandle(curModule.ModuleName), 0);