Text an anderes fenster schicken
-
Hallo,
ja klar von da hab ich auch das wie ich ein Tastendruck simoliere. Aber wie sende ich den Text an das programm-externe fenster? Ich verstehs net.
MFG,
Tomo
-
Hallo
ein Text ist eine Abfolge von Tastendrücken, jeder einzelne Buchstabe nacheinander.
bis bald
akari
-
Hallo,
Ja stimmt ^^
aber es wäre sehr umständlich tausende von zahlen in tastenanschläge einzugeben. Kann man nicht irgendwie einen String senden einfach?MFG,
Tomo
-
-
lol das is mir zu hoch diese seite xD
-
Hallo
warum?
AnsiString Text = "Text"; // Zu sendender String // Sendet den String an das Control das durch das Handle symbolisiert ist, // kann auch ein Handle aus einem fremden Fenster sein SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
bis bald
akari
-
WM_SETTEXT setzt üblicherweise den Text des Fenster-> in einer Form den Titel des Fensters, in einem Button den Text des Button (sind ja alles Fenster).
M.E. wäre WM_COPYDATA besser geeignet:
Das Senden:
String test="Hallo Welt"; COPYDATASTRUCT cds; cds.cbData=text.Length()+1; cds.lpData=text.c_str(); SendMessage(HANDLE_DES_FENSTERS,WM_COPYDATA,NULL,(LPARAM)&cds);
Die Message in der Headerdatei bekannt machen:
... private: // Anwenderdeklarationen void __fastcall WmCopyData(TWMCopyData& Message); // Messagehandling deklarieren: ... BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, WmCopyData) END_MESSAGE_MAP(TForm)
Die Funktion in der CPP-Datei:
void __fastcall TMain::WmCopyData(TWMCopyData& Message) { String test=(char*)Message.CopyDataStruct->lpData; }
-
Hallo
COPYDATA nützt einen aber nur etwas, wenn du empfangende Anwendung darauf eingerichtet ist. Davon gehe ich aber bei der Beschriebung des OP nicht aus
wie kann man ein String an ein anderes fenster schicken?
bis bald
akari
-
COPYDATA nützt einen aber nur etwas, wenn du empfangende Anwendung darauf eingerichtet ist.
Settext auch, denn wenn ich die Message nicht abfange und gesondert behandele wird ja "nur" der Fentertitel geändert. Und den String habe ich dann nicht zur Bearbeitung zur Verfügung.
-
Hallo,
akari schrieb:
Hallo
warum?
AnsiString Text = "Text"; // Zu sendender String // Sendet den String an das Control das durch das Handle symbolisiert ist, // kann auch ein Handle aus einem fremden Fenster sein SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
bis bald
akariHab es mal so gemacht...
AnsiString Text = Edit1->Text; // Zu sendender String // Sendet den String an das Control das durch das Handle symbolisiert ist, // kann auch ein Handle aus einem fremden Fenster sein SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
Habe auch Edit2->handle (edit: um zu testen ob es nur in der selben form geht) versucht aber das geht ja alles nur wenn es in der selben Form ist. Es soll ja an ein Programmexternes Fenster geschickt werden (wie z.b. msn-unterhaltungen)
-
Hallo
dann must du den Handle des Controls herausfinden, der in der Zielanwendung für die Benutzereingabe zuständig ist. Das must du mit der WinAPI-Funktion FindWindow machen. Es gibt auch irgendwo ein Tool, um aus laufenden Programmen die nötigen Fenster- (Control-)namen auszulesen, die du für FindWindow brauchst.
Schau dich besser im WinAPI-Forum um, dort gibt es sicher schon genug Threads zu diesem Thema.bis bald
akari
-
ich weiß ja nicht aber ich glaube ich lass das ganz das ist zu hoch für mich