Window 未收到 WM_KEYDOWN/WM_KEYUP 事件

Window Not Receiving WM_KEYDOWN/WM_KEYUP Events

我正在通过 SetWindowHookExA(从 DLL 注入)连接到另一个主进程 window 并附加到 WH_KEYBOARD 事件。但是,我的回调从未被调用,但挂钩成功并且我确实在 return 中获得了原始值。

使用 Spy++ 进行调查后,似乎 window 根本没有收到任何 WM_KEYUP / WM_KEYDOWN 等消息。使用调试器进一步挖掘,我可以确认 window 消息正在由 PeekMessage / TranslateMessage / DispatchMessage 处理,因此根据基于 PeekMessage 的 MSDN,事件应该正常发生。然而它们似乎从未发生过。

有什么东西可以让创建的 window 阻止这些消息发生在他们的 window 上吗? (我也尝试通过 SetWindowLongPtr 连接到 WNDPROC,但仍然没有成功,我的回调接收到所有消息都很好,但是 WM_KEY* 消息从未发生过。)

该应用程序确实使用了 DirectInput,但是在以前使用过 DirectInput 的其他项目中,键盘消息仍然正常出现。

快速回顾一下我尝试过的内容:

MSDN 说您确实可以在消息到达您的 WNDPROC 之前对其进行过滤。看看this page。您可能必须连接到堆栈中更高的位置,或者重新考虑您的方法。

我着手只是连接到 DirectInput 并通过它创建我需要的键盘处理内容。这不是我想做的事情,但最终结果按需工作。