Sondertasten



  • Hallo Community,

    ich habe Probleme beim einlesen von Sondertasten.
    Mir ist bekannt, das man auf den Wert 0 testen muss und anschließend den Scancode auslesen muss.

    Habe schon ein paar Varianten aus dem Internet probiert, hat aber nicht funktioniert.

    Das komische ist, das es bereits bei der Abfrage ob 'zeichen==0' ist, er nicht darauf eingeht (also das das Wort 'Sondertasten'gar nicht erscheint).

    Ich verwende DEV C/C++ (Version 4.9.9.2), MinGW(Version 3.4.2), Windows 7(64Bit)

    Hier mein Quellcode in C++ (Console):

    char zeichen;
    
    int main(int argc, char** argv) {
    
    while( 1 )
        {
        zeichen = getch(); putch(zeichen);
    
        if( zeichen ==  8 ) { cout << " \b"; } // DEL
        if( zeichen == 13 ) { cout <<  endl; } // ENTER
        if( zeichen == 18 ) { cout <<  "\t"; } // TAB
        if( zeichen == 27 ) break;             // ESC
    
        if( zeichen ==  0 )
            {
            cout << "Sondertasten";
            if( zeichen == 77 ) { cout << "Pfeiltaste Rechts"; }
            return zeichen+256;
            }
    
        }
    return 0; }
    

    Bei mir kommen die Ausgaben wie ' áH áK áP áM ' wenn ich die Pfeiltasten drücke.
    Aber die kommen ja sowieso standartmäßig von 'getch()' soweit ich weiss.

    Könnt Ihr mir da weiterhelfen?

    Gruß Ego

    P.S.
    Irgendwie funktioniert das mit den Leerzeichen bei mir nicht, sonst hätte ich den Quelltext etwas übersichtlicher gemacht.



  • Ego schrieb:

    Mir ist bekannt, das man auf den Wert 0 testen muss und anschließend den Scancode auslesen muss.

    _getch() liefert einen int , 224 bei den Pfeiltasten.



  • Ego schrieb:

    Ich verwende DEV C/C++ (Version 4.9.9.2), MinGW(Version 3.4.2), Windows 7(64Bit)

    Deine IDE ist 13 Jahre alt.
    Es gibt neuere Versionen: https://de.wikipedia.org/wiki/Orwell_Dev-C%2B%2B
    Das Gleiche gilt für den Compiler.

    Ego schrieb:

    Hier mein Quellcode in C++ (Console):

    char zeichen;   // keine globalen Variablen und besser int
    
    int main(int argc, char** argv) {
    
    while( 1 )
        {
        zeichen = getch(); putch(zeichen);  // cout << zeichen << " " , damit du den Code siehst
       
    // das folgende macht ja schon das putch  
        if( zeichen ==  8 ) { cout << " \b"; } // DEL  
        if( zeichen == 13 ) { cout <<  endl; } // ENTER
        if( zeichen == 18 ) { cout <<  "\t"; } // TAB
        if( zeichen == 27 ) break;             // ESC
    
        if( zeichen ==  0 )
            {
            cout << "Sondertasten";
            if( zeichen == 77 ) { cout << "Pfeiltaste Rechts"; }  // zeichen ist hier immer noch 0, da du nicht noch einmal gelesen hast.
            return zeichen+256;   // das ist in main eher merkwürdig.
            }
    
        }
    return 0; }
    

    Ego schrieb:

    Bei mir kommen die Ausgaben wie ' áH áK áP áM ' wenn ich die Pfeiltasten drücke.
    Aber die kommen ja sowieso standartmäßig von 'getch()' soweit ich weiss.

    Wenn du dir mal anschaust, welchen ASCII-Wert M hat, dann könnte das doch etwas damit zu zun haben.
    Dann schaust du dir noch den Wert von dem á an und weißt, worauf du achten musst.

    Dazu brauchst du keine Tabelle, sondern läßt das gleich dein Programm machen.



  • Lass dir doch einfach den ASCII-Wert (zum Test) ausgeben:

    cout << (int)zeichen << endl;
    


  • Besten Dank!! Hat funktioniert! Ich muss wohl noch ein weeenig üben.

    Gruß Ego