关于在上下文菜单上获取键盘笔划的问题

a question about getting keyboard stroke on context menu

我通过挂钩 GetMessage/PeekMessage 过滤传递给特定 win32 应用程序的键盘消息,除了上下文菜单外它工作正常。 例如,当我右键单击记事本中的空白区域并按 P 从剪贴板粘贴文本时,我根本没有看到 GetMessaage(WM_KEYDOWN...) 被调用。是否有任何其他 api 用于从上下文菜单的消息队列中获取键盘消息? 顺便说一句,出于特定原因,我不能为此目的使用 WH_KEYBOARD_LL

这是设计使然。

我可以在 Notepad/Edit 控件上重现这个问题。经与相关工程师讨论,确定鼠标右键按P后出现的菜单可以接收到WM_KEYDOWN,但WM_KEYDOWN消息在菜单内部处理,转为其他消息。这就是为什么我们无法在 GetMessage 中进行监控的原因。系统菜单内部的消息处理机制我们不清楚,如果有兴趣可以自己画一个菜单测试一下。