Auf Tastendruck prüfen



  • Guten Tag,
    eigentlich wäre die Aufgabe leicht für mich, aber ich kriegs grad nicht in meinen Kopf.
    Also ich habe folgendes vor:

    #include <windows.h>
    
    int main()
    {
        do
        {
            keybd_event(0x13, 0x13, 0, 0); //Enter Taste
            keybd_event(0x13, 0x13, KEYEVENTF_UP, 0);
        }
        while(!Falls_Eine_Taste_Gedrückt_Wurde());
    }
    

    Ich habe mir gedacht, irgendwas mit getch() zu machen, doch dann fiel mir ein, dass getch() einen Tastendruck verlangt. Doch bei mir, soll die while-Schleife nicht auf einen Tastendruck warten, sondern unterbrochen werden, falls eine Taste gedrückt wurde.

    mfg



  • Hiermit kannst du Tastatur eingaben Global abfangen.

    #include <windows>
    #include <windows>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    bool zeit = true;
    short KEY;
    char szKeyszKey[MAX_PATH];
    int scan_code;
    
    int i;
    
                 while(zeit == true)
                {
    
               i = i+1;
    
               cout<<i;
                        for(KEY=0;KEY<256;KEY++)
                        {
    
                                if(GetAsyncKeyState(KEY)==-32767)
                                {
                                      scan_code=MapVirtualKeyEx(KEY,0,GetKeyboardLayout(0) );
                                      cout<<scan_code;
                                }
    
                        }
    
    // vielleicht kannst du das ja einfach mit einer schleife für alle 256 tasten machen
                           if (scan_code==30)
                           {
    
                               MessageBox(0,"du hast eine taste gedrückt","sup? :>",0);
                               scan_code = 0;
                           }
    
                }
    
    }
    

  • Administrator

    1. Was hat das mit C++ zu tun?
    2. Dein Vorhaben führt zu Polling, davon ist dringends abzuraten.
    3. GetAsyncKeyState <- für das Polling 🙂
    4. Um auf Events der Konsole zu reagieren, empfiehlt sich die Funktion ReadConsoleInput. Mit dieser Funktion kannst du die WM_* Nachrichten abfangen. Sie blockiert allerdings, was aber eben nicht schlecht ist, da man nicht pollen sollte.
    Falls du wirklich eine Endlosschleife brauchst und das Programm etwas grösseres wird, dann solltest du dir überlegen, ob du einen Thread erstellen solltest, welcher eine Nachrichtenverwaltung umsetzt.

    Grüssli



  • Nein, das Programm bleibt genau bei dieser größe und es wird nicht größer. Das einzigste was ich halt noch ändern muss, ist das was in der while() steht und zwar die Prüfung ob eine Taste benutzt wurde. Ich werd mir ReadConsoleInput mal anschauen, danke.



  • Probier es mal mit

    if (kbhit())
    {
    eingabe=getch
    .
    .
    .

    und dann halt die Eingabe pruefen.



  • Peter Schreben schrieb:

    ...

    Danke! Genau das war es wonach ich suchte 👍


Log in to reply