右 Alt 键也会触发左 Control 键的 Windows 消息

问题描述 投票:0回答:3

在 win32 消息处理程序中,我希望能够处理左、右 Alt 和 Control 键。左和右是通过 lParam 的第 24 位来区分的,但是当我按下右 Alt 时,我还会收到一条有关左 Control 键的消息(因此右 Alt 是“alt gr”)。有没有办法关闭此行为或以某种方式区分由右 Alt 键触发的左 Control 键的消息?

winapi keyboard-events
3个回答
1
投票

我刚刚遇到这个问题,发现键盘语言选择了美国-国际键盘。切换解决了问题。

Image of keyboard language

我想通了,感谢 戴尔 - 右键 Alt 单击不起作用


0
投票

解决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.");
     }

}

-1
投票

阅读有关使用 Msdn GetKeyState

读取键盘状态的信息

然后调用

GetKeyState()
,用
VK
VK_LSHIFT
VK_RSHIFT
VK_LCONTROL
VK_RCONTROL
VK_LMENU
VK_RMENU
看看是否按下了

© www.soinside.com 2019 - 2024. All rights reserved.