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 的其他项目中,键盘消息仍然正常出现。
快速回顾一下我尝试过的内容:
- 用 WH_KEYBOARD 设置 WindowsHookExA;从未调用过回调。
- SetWindowLongPtr 与 GWL_WNDPROC;呼叫已接通,永远不会看到键盘消息。
- 已确认 window 确实使用 PeekMessage 来处理其消息,因此键盘消息应该会正常运行。
MSDN 说您确实可以在消息到达您的 WNDPROC 之前对其进行过滤。看看this page。您可能必须连接到堆栈中更高的位置,或者重新考虑您的方法。
我着手只是连接到 DirectInput 并通过它创建我需要的键盘处理内容。这不是我想做的事情,但最终结果按需工作。
我正在通过 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 的其他项目中,键盘消息仍然正常出现。
快速回顾一下我尝试过的内容:
- 用 WH_KEYBOARD 设置 WindowsHookExA;从未调用过回调。
- SetWindowLongPtr 与 GWL_WNDPROC;呼叫已接通,永远不会看到键盘消息。
- 已确认 window 确实使用 PeekMessage 来处理其消息,因此键盘消息应该会正常运行。
MSDN 说您确实可以在消息到达您的 WNDPROC 之前对其进行过滤。看看this page。您可能必须连接到堆栈中更高的位置,或者重新考虑您的方法。
我着手只是连接到 DirectInput 并通过它创建我需要的键盘处理内容。这不是我想做的事情,但最终结果按需工作。