在 win32 消息处理程序中,我希望能够处理左、右 Alt 和 Control 键。左和右是通过 lParam 的第 24 位来区分的,但是当我按下右 Alt 时,我还会收到一条有关左 Control 键的消息(因此右 Alt 是“alt gr”)。有没有办法关闭此行为或以某种方式区分由右 Alt 键触发的左 Control 键的消息?
我刚刚遇到这个问题,发现键盘语言选择了美国-国际键盘。切换解决了问题。
我想通了,感谢 戴尔 - 右键 Alt 单击不起作用
解决WinForms键盘测试软件中的按键检测问题
我最近开发了一个用于键盘测试的 WinForms 应用程序,其中遇到了按键检测问题。具体来说,当按下右 Alt (rAlt) 键时,也会触发左 Control (Ctrl) 键消息。经过一些调试,我找到了一个解决方案,可以帮助其他面临类似问题的人。
最初,我使用 e.KeyCode 来检测事件处理程序中的键,该处理程序返回诸如 Control、Alt 之类的标识符。这会导致歧义,尤其是使用 Alt 和 Control 等修饰键时。出现此问题的原因是,由于 e.KeyCode 处理组合键的方式,同时检测到 rAlt 和 Ctrl 键。
为了解决这个问题,我改用 e.KeyData 而不是 e.KeyCode。与 e.KeyCode 不同,e.KeyData 返回不带修饰符的实际按下的键。这个改变让我更容易区分按键并准确检测 rAlt 键,而不受 Ctrl 的干扰。
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.RMenu) // RMenu corresponds to Right Alt key
{
MessageBox.Show("Right Alt (rAlt) key pressed.");
}
else if(e.KeyData == Keys.ControlKey){
MessageBox.Show("LeftControl KeysPressed.");
}
}
阅读有关使用 Msdn GetKeyState
读取键盘状态的信息然后调用
GetKeyState()
,用VK
VK_LSHIFT
VK_RSHIFT
VK_LCONTROL
VK_RCONTROL
VK_LMENU
的 VK_RMENU
看看是否按下了