Respuestas:
IBM llamó a esta clave "gráfico alternativo" y no es un sustituto de CTRL+ ALT, aunque CTRL+ ALTse implementó como sustituto de ALT GRWindows. Es un modificador de clave (como CTRL o SHIFT) que permite una entrada diferente de la que normalmente se espera de una clave.
Dependiendo de la configuración de su teclado y ubicación, se puede usar para producir caracteres con signos diacríticos cuando se usa junto con teclas alfabéticas (con mayor frecuencia vocales) y el tercer símbolo que se imprime en algunas teclas, por ejemplo, € ( ALT GR+ 4) o ¦ ( ALT GR+ `) que aparece en mi teclado del Reino Unido. Los teclados de Europa continental generalmente tienen muchas más teclas con símbolos adicionales impresos en ellas que corresponden a las letras con los diversos tipos de signos diacríticos utilizados en esos idiomas.
Vea la tecla AltGr para más información.
Alt. Es extraño que el artículo de Wikipedia ni siquiera lo mencione.
Alt Grse implementa como Ctrl+ Altpero Ctrl+ Altno se asigna a Alt Gr.
Para algunos teclados, permite algunas combinaciones alternativas. En algunos teclados permite el símbolo del centavo o el símbolo del euro: Wikipedia tiene una lista bastante completa de combinaciones que usan Alt Gr.
Sin embargo, al usar un mapa de teclas de EE. UU. / Windows, no hace nada en la mayoría de los casos.
Además, útil para personas con necesidades de accesibilidad que tienen que hacer Ctrl + alt + del. Lo intentas con una sola mano.
AltGra Ctrl+ Alt(al menos en Windows y Linux), por lo que no van a funcionar exactamente igual. (Excepto quizás en el caso de un teclado que envía Ctrl+ Altcódigos de escaneo.)
Alt gr es necesario para algunos idiomas como el polaco:
Alt Gr+ a= ą
Alt Gr+ s= ś
Alt Gr+ shift+ n= Ń
Estoy bastante seguro de que se implementa de esta manera.
Puede probar el vkCode desde KBDLLHOOKSTRUCT para ver qué obtiene.
Lista de enumeración asignada desde aquí , aquí y www.pinvoke.net/default.aspx/Constants/WM.html
Debería ser equivalente a esto:
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;
Las combinaciones de teclas Alt + Gr importantes en un teclado alemán predeterminado son: