Durch mein Interesse an dieser Frage habe ich ein wenig Forschung mit GLFW und 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;
}
}
diesen Code verwenden wir die folgenden Scancodes sehen:
Left Alt: 0x0038
Right Alt: 0x0138
Left Ctrl: 0x001d
Right Ctrl: 0x011d
Wie Sie können siehe die Modifier-Tasten auf der rechten Seite der Tastatur haben ein erweitertes Bit (Danke Stuartd) und so mit GLFW ist es möglich, zwischen beiden Alts und beide Kontrollen zu unterscheiden.
jedoch das .NET Framework in C#, wie Sie sind ich folgenden Callback:
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());
}
Ich habe auch die Ergebnisse:
Left Alt: 18 True False Alt
Right Alt: 17 False True Control
Left Ctrl: 17 False True Control
Right Ctrl: 17 False True Control
dies, weil ich geneigt wären zu sagen, dass dies eine Einschränkung des .NET Framework ist, zumindest in der Version, die ich verwende (4.5.2) und dass die Antwort auf Ihre Frage in diesem Fall ist, können Sie nicht zwischen Left Ctrl + Right Alt
und Right Alt
unterscheiden. Ich schlage vor, Sie betrachten this answer und verwenden stattdessen die Win32-API.
Beachten Sie auch, dass Right Alt
Alt Gr
ist.
Alt Gr ist ein sehr oft verwendeter Key auf deutschen Keyboards. Es wird verwendet, um "@", "€", "\", "~" und mehrere andere Zeichen – Generator
@NickA aus Interesse zu schreiben, ist das erweiterte Bit auf dem Scancode das gleiche für beide? – stuartd
@NickA gibt es ein erweitertes Bit auf Scancodes, sowohl rechts als auch links alt sind '0x38' aber links hat' 0' als das erweiterte Bit, und rechts hat '0xE0', so können Sie sie unterscheiden. Es gibt eine Menge [Altcode in Scancodes] (https://blogs.msdn.microsoft.com/oldnewthing/20080211-00/?p=23503/)! – stuartd