我在某处读到过,在某些布局中发现的键是+Alt Gr的替代品。CtrlAlt
但是,这种组合有什么用处呢?有没有使用Ctrl+ 的快捷键记录Alt?
答案1
IBM 将此键命名为“替代图形”,它不是CTRL+的替代品ALT,尽管CTRL+在 Windows 中ALT被实现为 的替代品ALT GR。它是一个键修饰符(如 CTRL 或 SHIFT),可以实现与通常预期按键不同的输入。
根据您的键盘和位置设置,它可以用于在与字母键(通常是元音)和某些键上印有的第三个符号(例如,我的英国键盘上的 € ( ALT GR+ 4) 或 ¦ ( ALT GR+ `))结合使用时产生带变音符号的字符。欧洲大陆键盘通常有更多键,上面印有额外的符号,这些符号与这些语言中使用的各种变音符号的字母相对应。
看AltGr 键了解更多信息。
答案2
对于某些键盘,它允许一些替代组合。在某些键盘中,它允许使用美分符号或欧元符号 - 维基百科有相当全面的组合列表使用 Alt Gr。
但是使用 US/Windows 键盘映射,大多数情况下它不会执行任何操作。
答案3
此外,对于需要使用 Ctrl+alt+del 的无障碍人士来说,它也十分方便。您可以单手尝试。
答案4
我确信它是像这样实现的。
您可以从 KBDLLHOOKSTRUCT 测试 vkCode 以查看您得到了什么。
映射枚举列表来自这里,这里以及 www.pinvoke.net/default.aspx/Constants/WM.html
它应该相当于这个:
using System.Windows.Forms;
isAltGr ? (Keys) (1 << 19) : Keys.None
private static Keys BuildKeyData(Keys virtualKeyCode) => virtualKeyCode | (IsDownControl ? Keys.Control : Keys.None) | (IsDownShift ? Keys.Shift : Keys.None) | (IsDownAlt ? Keys.Alt : Keys.None) | (IsAltGr ? (Keys) (1 << 19) : Keys.None);
private static bool IsDownControl => IsKeyPressed((ushort)VirtualKeys.LeftControl) || IsKeyPressed((ushort)VirtualKeys.RightControl);
private static bool IsDownShift => IsKeyPressed((ushort)VirtualKeys.LeftShift) || IsKeyPressed((ushort)VirtualKeys.RightShift);
private static bool IsDownAlt => IsKeyPressed((ushort)VirtualKeys.LeftMenu) || IsKeyPressed((ushort)VirtualKeys.RightMenu) || IsKeyPressed((ushort)VirtualKeys.Menu);
private static bool IsAltGr => IsDownControl && IsDownAlt;