Tastendruck simulieren



  • 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.



  • Hallo

    klar funktioniert AnsiString::Length().
    Du darfst nur nicht vergessen, das bei AnsiString die Zählung der Zeichen bei 1 anfängt.

    Ansosnsten zeig mal deinen Code, der nicht funktioniert (was im übrigen keine ausreichende Fehlerbeschreibung ist)

    bis bald
    akari



  • Hm, mit dem AnsiString Length komm ich nicht weiter^^

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Timer1->Interval = 100;
      AnsiString Text = Edit1->Text;
      int Leng = AnsiString->Length(Text);
      int i;
      for (i = 1, i <= Leng, i++)
      {
          keybd_event(Text[i], 0, 0, NULL);
          keybd_event(Text[i], 0, KEYEVENTF_KEYUP, 0);
      }
      keybd_event(13, 0, 0, NULL);
      keybd_event(VK_CONTROL, 0, 0, NULL);
      keybd_event(13, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    }
    


  • Ändere

    int Leng = AnsiString->Length(Text);
    

    in

    int Leng = Text.Length();
    


  • Ah, gut, jetzt klappt es einigermaßen.
    Aber wenn ich als Text "a" eingeb, wird immer "1" ausgegeben... Bei "b" dann "2" usw....

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      AnsiString Text = Edit1->Text;
      int Leng = Text.Length();
      int i;
      for (i = 1; i <= Leng; i++)
      {
          keybd_event(Text[i], 0, 0, NULL);
          keybd_event(Text[i], 0, KEYEVENTF_KEYUP, 0);
      }
      keybd_event(13, 0, 0, NULL);
      keybd_event(VK_CONTROL, 0, 0, NULL);
      keybd_event(13, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    }
    


  • Also, was für einen Grund hat es, das der Text in Zahlen konvertiert wird? oO


Anmelden zum Antworten