奇怪的Windows消息序列WM_KEYDOWN/WM_KEYUP,同时按VK_MENU(Alt键)

Strange Windows Message sequence of WM_KEYDOWN / WM_KEYUP while pressing VK_MENU (Alt key)

本文关键字:WM VK MENU Alt Windows 消息 KEYDOWN KEYUP      更新时间:2023-10-16

当我按下和释放 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_CONTROLVK_MENUWM_KEYDOWNAlt等关键字。我找不到任何有用的东西。也不是在每个键盘上都正确 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)

生成事件。
非常感谢汉斯·帕桑特。