Answers:
IBM将该键命名为“替代图形” ,尽管+ 在Windows中已实现,但它不能替代CTRL+ 。它是一个键修饰符(如CTRL或SHIFT),它可以实现与通常期望的键不同的输入。ALTCTRLALTALT GR
根据键盘和位置设置的不同,它与字母键(通常是元音)结合使用时,可以产生带有变音符号的字符,并在某些键上打印第三个符号,例如€(ALT GR+ 4)或我的英国键盘上出现的¦(ALT GR+ `)。欧洲大陆键盘通常会有更多的按键,上面印有额外的符号,这些字母与带有这些语言中各种变音符号的字母相对应。
有关更多信息,请参见AltGr键。
Alt
。奇怪的是,维基百科的文章甚至都没有提到。
Alt Gr
实现为Ctrl
+,Alt
但Ctrl
+ Alt
并未映射到Alt Gr
。
对于某些键盘,它允许一些替代组合。在某些键盘中,它允许使用美分符号或欧元符号-维基百科提供了使用Alt Gr 的相当全面的组合列表。
但是,使用US / Windows键盘映射在大多数情况下不会执行任何操作。
对于某些语言(例如波兰语),必须使用Alt gr:
Alt Gr+ a=±
Alt Gr+ s=ś
Alt Gr+ shift+ n=Ń
此外,对于需要执行Ctrl + alt + del的需要辅助功能的人员也很方便。您可以单手尝试。
AltGr
to Ctrl
+ Alt
转换低得多(至少在Windows和Linux上是如此),因此它们的工作原理并不完全相同。(也许在键盘发送Ctrl
+ Alt
扫描码的情况下除外。)
我很确定它是这样实现的。
您可以从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;