En raison de mon intérêt pour cette question, je fait un peu de recherche en utilisant GLFW et C++:
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
if (action == GLFW_PRESS) {
std::cout << std::hex << scancode << std::endl;
}
}
En utilisant ce code je peux voir les scancodes suivants:
Left Alt: 0x0038
Right Alt: 0x0138
Left Ctrl: 0x001d
Right Ctrl: 0x011d
Comme vous pouvez le voir les touches de modification sur le côté droit du clavier ont un bit étendu (merci stuartd) et donc en utilisant GLFW, il est possible de faire la distinction entre les deux alts et les deux contrôles.
Cependant, en utilisant le .NET Framework en C# que vous êtes je le rappel suivant:
private void func(object sender, KeyEventArgs e) {
MessageBox.Show(e.KeyValue.ToString());
MessageBox.Show(e.Alt.ToString());
MessageBox.Show(e.Control.ToString());
MessageBox.Show(e.Modifiers.ToString());
}
J'ai aussi obtenu les résultats de:
Left Alt: 18 True False Alt
Right Alt: 17 False True Control
Left Ctrl: 17 False True Control
Right Ctrl: 17 False True Control
En raison de cela, je serais enclin pour dire que c'est une limitation du .NET Framework, au moins dans la version que j'utilise (4.5.2) et que la réponse à votre question dans ce cas est, non, vous ne pouvez pas distinguer entre Left Ctrl + Right Alt
et Right Alt
. Je vous suggère de regarder this answer et d'utiliser l'API Win32 à la place. Notez également que Right Alt
est Alt Gr
.
Alt Gr est une touche très souvent utilisée sur les claviers allemands. Son utilisé pour écrire "@", "€", "\", "~" et plusieurs autres caractères – Generator
@NickA par intérêt, est le bit étendu sur le scancode la même chose pour les deux? – stuartd
@NickA il y a un bit étendu sur les scancodes, à droite et à gauche alt sont '0x38' mais à gauche a' 0' comme le bit étendu, et à droite a '0xE0', qui est comment vous pouvez les différencier. Il y a beaucoup de [code hérité dans Scancodes] (https://blogs.msdn.microsoft.com/oldnewthing/20080211-00/?p=23503/)! – stuartd