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 Gr
se implementa como Ctrl
+ Alt
pero Ctrl
+ Alt
no 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.
AltGr
a 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
+ Alt
có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: