if Key Pressed



  • Hey,
    gibt es eine Möglichkeit wenn eine Taste gedrückt ist eine Funktion auszuführen?
    Ich hatte folgendes geschrieben:

    while(true)
    {
    if(GetAsnycKeyState(VK_DOWN))
    {
    ...
    }
    }
    

    Dieser Ablauf funktioniert jedoch nur, solange VK_DOWN die letzte Taste ist, die ich gedrückt habe. Also wenn ich VK_DOWN gedrückt halte, und dann z.b. "2" drücke, so wird der inhalt (...) nicht mehr ausgeführt. Gibt es vieleicht eine andere Funktion mit der das ganze funktioniert?



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.





  • 😃

    Fragt alle Tastatureingaben Global ab.
    Wenn es nur in deinem Programm abgefragt werden soll dann wäre kbhit(); wohl besser.

    #include <windows>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    int scan;
    char str_key[256];
    
    while(true)
    {
    Sleep(1);
            for (int key=0;key<255;key++)
            {
                    if(GetAsyncKeyState(key) == -32767 )
                    {
                            scan=MapVirtualKeyEx(key,0,GetKeyboardLayout(0));
                            GetKeyNameText(scan << 16, str_key ,MAX_PATH);
                            cout<<"You have press: " << str_key <<"  Scancode for this key: " << scan<< endl;
    
                            if ( scan == 80 )
                            {
                                    cout<<"You have press VK_DOWN"<<endl;
                                    MessageBox(0,"Im a function you can find me in user32.dll =)","Hello",0);
                            }
    
                    }
    
            }
    }
    
    }
    


  • Hi,
    eine weitere Möglichkeit wäre noch:

    #include <iostream>
    #include <windows.h>
    #include <conio.h>  // für getch();
    
    using namespace std;
    
    int main() {
    
        unsigned char auswahl;  
    
        do {
    
            auswahl=getch(); 
    
            if(auswahl == 72) {  // Wenn Pfeiltaste Hoch
    
            }
    
            if(auswahl == 80) {  // Wenn Pfeiltaste Runter
    
            }
    
        } while(auswahl != 83);  // Solange bis [Entf] gedrückt wird
    
        return (0);     // Programm beenden
    
    }
    

    Ich hoffe ich konnte dir weiterhelfen.

    Galileo



  • Statt getch() aus conio.h kann man auch schreiben:

    #ifdef _WIN32
    char Getch(){
    HANDLE hdl=GetStdHandle(STD_INPUT_HANDLE);
    HANDLE hdo=GetStdHandle(STD_OUTPUT_HANDLE);

    DWORD oldmode; //Zuvor verwendeter Konsolenmodus
    CONSOLE_CURSOR_INFO cci;

    char gedrueckt;

    GetConsoleMode(hdl, &oldmode);
    GetConsoleCursorInfo(hdo, &cci); cci.bVisible=false; //Cursor nicht sichtbar

    SetConsoleMode(hdl, oldmode&~(ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT)); //Input wird nicht angezeigt, Entertaste muss nicht gedrückt werden
    SetConsoleCursorInfo(hdo, &cci);

    gedrueckt=getchar();

    cci.bVisible=true; SetConsoleCursorInfo(hdo, &cci); //Setze Cursor wieder zurück
    SetConsoleMode(hdl, oldmode); //Und den Modus wieder auf den zuvor verwendeten

    return gedrueckt;
    }
    #endif


Anmelden zum Antworten