奇怪的Windows消息序列WM_KEYDOWN/WM_KEYUP,同时按VK_MENU(Alt键)
Strange Windows Message sequence of WM_KEYDOWN / WM_KEYUP while pressing VK_MENU (Alt key)
当我按下和释放 Alt 键(在虚拟键代码中称为 VK_MENU
WM_KEY*
时,我对消息序列感到非常困惑。按右 Alt 键时,我收到消息:
WM_KEYDOWN with wParam == 0x11 (VK_CONTROL)
WM_KEYDOWN with wParam == 0x12 (VK_MENU)
两条消息一一出现,当我释放该键(右 Alt)时,我得到:
WM_KEYUP with wParam == 0x11 (VK_CONTROL)
WM_KEYUP with wParam == 0x12 (VK_MENU)
我相当期待:
WM_KEYDOWN with wParam == 0x12 (VK_MENU)
WM_KEYUP with wParam == 0x12 (VK_MENU)
如果消息序列根本没有被触及,为什么消息序列中涉及VK_CONTROL
?有什么解释吗?
编辑:有些人将其标记为重复的 为什么我在 Alt 上收到两条消息被按下?.是的,我同意这是一个重复的,但不知何故,当我试图寻找答案时,给出VK_CONTROL
、VK_MENU
、WM_KEYDOWN
、Alt
等关键字。我找不到任何有用的东西。也不是在每个键盘上都正确 Alt 根据位置被标记为 AltGr(只有操作系统键盘设置很重要),因此它也是一个关键字,您可能会遇到问题来查找。所以我认为用其他方式解释它是件好事。
为了 stackoverflow.com 清楚起见,我重写了汉斯·帕桑特(Hans Passant)的回答,他将自己的答案作为评论。
我可以确认在某些键盘布局上,Alt(右)的行为就像将 Alt+Ctrl 推在一起一样。同样在我正在使用的键盘之一上 Alt(右)被标记为 AltGr 这里详细描述的内容。
我还可以确认将键盘布局更改为例如。美国本土(非国际)导致只有那些
WM_KEYDOWN with wParam == 0x12 (VK_MENU)
WM_KEYUP with wParam == 0x12 (VK_MENU)
生成事件。
非常感谢汉斯·帕桑特。