This question already has an answer here:
Why do I get two messages on `AltGr` being pressed?

(1个答案)


4年前关闭。




当我按下并释放Alt键(在虚拟键代码中称为WM_KEY*)时,我对VK_MENU消息序列感到非常困惑。
当按右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?有什么解释吗?
编辑:有些人将此标记为Why do I get two messages on being pressed?的副本。是的,我同意这是重复的,但是以某种方式,当我尝试查找给出诸如VK_CONTROLVK_MENUWM_KEYDOWNAlt等关键字的答案时,我找不到任何有用的东西。同样,并非在每个右键盘上,Alt都会根据位置标记为AltGr(仅OS键盘设置很重要),因此它也是一个关键字,您可能很难找出来。因此,我认为以其他方式解释它是很好的。

最佳答案

为了使stackoverflow.com清晰,我重写了Hans Passant的答案,他把他的答案作为评论。
我可以确认在某些键盘布局上Alt(right)的行为就像将Alt + Ctrl推到一起一样。同样在我正在使用Alt(right)的一个键盘上,也标记了AltGr,详细信息here进行了描述。
我还可以确认将键盘布局更改为例如。美国原住民(非国际)导致仅那些

WM_KEYDOWN with wParam == 0x12 (VK_MENU)
WM_KEYUP with wParam == 0x12 (VK_MENU)

事件生成。
非常感谢Hans Passant

关于c++ - 按下VK_MENU(Alt键)时,WM_KEYDOWN/WM_KEYUP的奇怪Windows消息序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35752702/

10-11 22:12
查看更多