Tastendruck simulieren
-
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 machenText = 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