问题描述
我通过挂钩 GetMessage / PeekMessage 来过滤传递到特定Win32应用程序的键盘消息,除上下文菜单外,它都可以正常工作。 例如,当我右键单击记事本中的空白区域并按P从剪贴板粘贴文本时,我根本看不到GetMessaage(WM_KEYDOWN ...)被调用。是否有其他用于从上下文队列的消息队列中获取键盘消息的API? 顺便说一句,出于特定原因,我不能为此目的使用 WH_KEYBOARD_LL 。
解决方法
这是设计使然。
我可以在记事本/编辑控件上重现此问题。与相关工程师讨论后,可以确定在按下鼠标右键并按P后显示的菜单可以接收WM_KEYDOWN
,但是WM_KEYDOWN
消息在菜单内部处理,并转换为其他消息。消息。这就是为什么我们无法在GetMessage
中进行监视的原因。我们不知道系统菜单内的消息处理机制,但是如果您有兴趣,可以绘制菜单并自己进行测试。