Respostas:
A IBM nomeou essa chave como "gráfico alternativo" e não é um substituto para CTRL + ALT , Apesar CTRL + ALT foi implementado como um substituto para ALT GR no Windows. É um modificador de chave (como CTRL ou SHIFT) que permite uma entrada diferente do que é normalmente esperado de uma chave.
Dependendo da configuração do seu teclado e localização, ele pode ser usado para produzir caracteres com marcas diacríticas quando usado em conjunto com teclas alfabéticas (na maioria das vezes vogais) e o terceiro símbolo que é impresso em algumas teclas, por exemplo, € ( ALT GR + 4 ) ou ¦ ( ALT GR + ` ) que aparecem no meu teclado do Reino Unido. Os teclados da Europa continental geralmente têm muito mais teclas com símbolos extras impressos nelas, que correspondem a letras com os vários tipos de marcas diacríticas usadas nesses idiomas.
Vejo Chave AltGr Para maiores informações.
Alt
. É estranho que o artigo da Wikipedia nem sequer mencione isso.
Alt Gr
é implementado como Ctrl
+ Alt
mas Ctrl
+ Alt
não mapeia para Alt Gr
.
Para alguns teclados, permite algumas combinações alternativas. Em alguns teclados, permite o símbolo do centavo ou o símbolo do euro - a Wikipedia uma lista bastante abrangente de combinações usando Alt Gr.
No entanto, usando um mapa de teclas US / Windows, ele não faz nada na maioria dos casos.
Alt gr é necessário para alguns idiomas como polonês:
Alt Gr + uma = ą
Alt Gr + s = ś
Alt Gr + mudança + n = Ń
Além disso, útil para pessoas com necessidades de acessibilidade que têm que fazer um Ctrl + alt + del. Você tenta com uma mão.
AltGr
para Ctrl
+ Alt
conversão (pelo menos no Windows e Linux), então eles não vão funcionar exatamente da mesma forma. (Exceto, talvez, no caso de um envio de teclado Ctrl
+ Alt
scancodes.)
Tenho certeza que é implementado assim.
Você pode testar o vkCode do KBDLLHOOKSTRUCT para ver o que você obtém.
Lista enum mapeada de Aqui , Aqui e www.pinvoke.net/default.aspx/Constants/WM.html
Deve ser equivalente a isso:
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;
Importantes combinações de teclas Alt + Gr em um teclado alemão padrão são: