Pfeiltasten-Escapes in Windows?
Guten Abend,
wenn man auf der Tastatur eine Pfeiltaste drückt, wird ja normal die folgenden Sequenz in stdin geschrieben:
'\033' (esc)
'['
und 'A', 'B', 'C' oder 'D' -- je nach gedrückter Pfeiltaste.
Unter Linux kann man so ganz einfach die Pfeiltaste herausfinden, die gedrückt wurde:
while(1){
// Erstes Zeichen ist ESC
if(getch() == '\033'){
// Zeichen '[' überspringen
getch();
// Pfeiltaste auslesen
switch(getch()){
case 'A': /* Pfeil hoch */ break;
case 'B': /* Pfeil runter */ break;
case 'C': /* Pfeil rechts */ break;
case 'D': /* Pfeil links */ break;
}
}
Unter Windows werden aber nur zwei Zeichen in stdin geschrieben:
Hoch - ÓH
Runter - ÓP
Rechts - ÓM
Links - ÓK
Das erste Zeichen hat jetzt aber 4 Bytes. Wenn ich die entpackten Bytes wieder in zwei Zeichenkette packe, bekomme ich aber andere Zeichen (Ã und ein Steuerzeichen, möglicherweise Esc, konnte nicht validiert werden) heraus.
Hat jemand eine Idee, wie man in C unter Windows feststellen kann, welche Pfeiltaste gedrückt wurde?
Liebe Grüße
Win7User
2 Antworten
Ich habe es jetzt so gelöst, dass ich das eingelesene Zeichen mit Zahlenwert des Ó-Zeichens vergleiche und falls es das ist, das nächste Zeichen als Pfeiltaste einlese:
char c;
while(1){
while(!kbhit());
if((c = getch()) == 224){
c = getch();
printf("Pfeiltaste Code: %c", c);
}
Falls jemand eine bessere Idee hat (abgesehen davon auf Linux zu programmieren ;-)), bitte einfach schreiben.
"C" weiß ich nicht - in Delphi und Turbopascal musste man bei Sondertasten das Ereignis "Keypressed" 2x hintereinander abfangen.....
Events gibt es in C nicht :)
Aber unter Linux muss man auch mehrmals hintereinander den Buffer auslesen:
1. Escape-Zeichen lesen (zeigt, dass es kein Buchstabe ist)
2. [-Zeichen aus dem Buffer löschen
3. Pfeiltaste auslesen