Tastendruck simulieren



  • Wie kann ich einen Tastendruck simulieren? Also wenn ich z.B. einen Button drücke, das immer "A" oder "Enter" oder so simuliert wird und egal was ich grade makiert habe, da wird das jeweilige Zeichen auch ausgeführt. Halt ein normaler Tastendruck^^



  • Was ist denn das für ein Programm wo du das brauchst ?
    Konsolenanwendung ? - Windows (WinAPI) ? - solltest vielleicht etwas genauer sagen was du suchst dann kann man dir auch schneller helfen 😉



  • Ein Freund programmiert gerade Snake in C auf der Konsole (Windows). Er Hatte eine Hauptschleife, die auf eine Tastatureingabe wartete. Doch leider machte die while Schleide ohne eingabe gar nicht erst weiter

    char c = ' ';
    while(c != 'q')
    {
        c = getche(); // Ohne Input macht die schleife nicht weiter. Wenn man nichts         eingibt, soll die schlange sich automatisch bewegen;
    
        MoveSnake(c); // --> Schlange wird bewegt, wenn c: w, a, s, d
        DrawSnake();
    
    }
    


  • @Tc++H

    Ist klar, da ja der Compiler durch getche() auf ne Eingabe wartet, was mir jetzt da spontan einfallen würde wäre die Möglichkeit den Tastaturbuffer in der Schleife auszulesen und dann jenachdem was da drin war halt Programm beendet oder net. Ist aber nur ne vage Idee, keine Ahnung ob das geht.

    @milos51 Wenn ich mir das so überlege, nehme ich an das du sowas wie eine Bildschirmtastatur möchtest, wo man mit der Maus rumklicken kann und dann die jeweiligen Zeichen der Tastatur ausgegeben werden oder?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.



  • schau der den test-quelltext zur inproved console an und puzzelt den code
    dann für euch passend zusammen.

    mfg f.-th.



  • Tc++H schrieb:

    Ein Freund programmiert gerade Snake in C auf der Konsole (Windows). Er Hatte eine Hauptschleife, die auf eine Tastatureingabe wartete. Doch leider machte die while Schleide ohne eingabe gar nicht erst weiter

    char c = ' ';
    while(c != 'q')
    {
        c = getche(); // Ohne Input macht die schleife nicht weiter. Wenn man nichts         eingibt, soll die schlange sich automatisch bewegen;
    
        MoveSnake(c); // --> Schlange wird bewegt, wenn c: w, a, s, d
        DrawSnake();
    
    }
    

    Falls deinem oder seinem Compiler die conio.h zur Verfügung steht (einfach mal im Includes-Ordner des Compilers schauen; Achtung, die vom DEV-CPP ist nicht ganz vollständig! 😡 ), dann könnt ihr auch die nette kleine Funktion kbhit() verwenden.

    Mehr zum Thema gibts übrigens auch in der Konsolen-FAQ

    @milo51
    Kannst du dein Problem mal etwas genauer beschreiben? Oder besser gesagt, beschreiben was du genau machen möchtest.



  • Ich möchte keine Konsolenanwendung, sondern ganz normal, ja wie nennt man das, mit Benutzerinterface eben.
    Ich möchte z.B. ein Programm machen, wo man eine oder mehrere Nachrichten eingeben kann und per Timer werden die Nachrichten in ein Fenster geschrieben. So in etwa^^



  • milo51 schrieb:

    Ich möchte keine Konsolenanwendung, sondern ganz normal, ja wie nennt man das, mit Benutzerinterface eben.
    Ich möchte z.B. ein Programm machen, wo man eine oder mehrere Nachrichten eingeben kann und per Timer werden die Nachrichten in ein Fenster geschrieben. So in etwa^^

    Dann sollte der Thread wohl besser in eines der GUI-Foren. Welches Betriebssystem und welchen Compiler benutzt du?



  • Ich benutze Windows XP und Borland C++ Builder.



  • Ach ja, könntet ihr diesen Thread dann bitte verschieben? 🙂



  • milo51 schrieb:

    Ach ja, könntet ihr diesen Thread dann bitte verschieben? 🙂

    Deswegen hab ich gefragt 😉



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum DOS und Win32-Konsole in das Forum VCL/CLX (Borland C++ Builder) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Willkommen im BCB Forum. Und auch du seist gleich auf die FAQ verwiesen...



  • Anscheinend gibt es da wohl kaum eine leichte Lösung...?



  • Ok, ich merk, ich hab's dum formuliert^^
    Wie ich einen Tastendruck simulieren kann weiß ich, aber ich will ja das ungefähr so machen

    Text = Edit1->Text;
    keybd_event(text, 0, 0, NULL);
    ...
    

    Nur geht das ja nicht. Wie muss ich denn Text konvertieren?



  • Hallo

    keybd_event erwartet als ersten Parameter ein BYTE, also ein char.
    Denn es geht ja um ein Zeichen, und nicht um eine Zeichenkette.

    bis bald
    akari



  • Aaaaahhh, endlich hab ich mal verstanden was ein Char ist 😃
    Danke hehe!
    Ja gut, dann geht das wohl nicht mit keybd oder was?



  • Hallo

    doch. Du must nur aus der Zeichenkette Text erstmal ein Zeichen auswählen, das du an keybd_event übergibst.

    Text = Edit1->Text;
    
    // Wenn Text nicht leer, erstes Zeichen an keybd_event übergeben
    if (Text != "") keybd_event(Text[1], 0, 0, NULL);
    

    bis bald
    akari



  • Ja das klingt gut, nur brauch ich dazu doch noch Length oder?
    Ich muss ja schließlich wenn ich eine for-Schleife mache, dem Compiler sagen, wann das Wort zu Ende ist.
    Allerdings funktioniert der befehl length nicht...jedenfalls nicht so wie bei Delphi.


Anmelden zum Antworten