Entwickler-Ecke
Windows API - Text in Editfeld eines Fremden Programmes eintragen, wie?
fuba - Fr 11.08.06 14:59
Titel: Text in Editfeld eines Fremden Programmes eintragen, wie?
Hi leute,
Wie mache ich das?
Ich würde zum beistpiel in "Start" -> "Ausführen" dessen Combobox einen Text über mein programm einfügen lassen.
Das müsste doch möglich sein oder?
Das handle des festers und das klicken auf den "OK" button funzt schon, aber jetzt stehe ich vor dem problem das ich nix in das editfeld (combobox) reinbekomme :(
kann mir da wer helfen?
azubi_20 - Fr 11.08.06 15:09
Guck dir dazu mal SendMessage an.
fuba - Fr 11.08.06 15:19
azubi_20 hat folgendes geschrieben: |
Guck dir dazu mal SendMessage an. |
Danke ich denk mal ich habs gefunden.
Bisschen in google gesucht und das gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button2Click(Sender: TObject); var wnd : HWND; i : Integer; s : string; begin wnd := FindWindow('notepad',nil); if wnd <> 0 then begin wnd := FindWindowEx(wnd,0,'Edit',nil); s := 'ABC'; For i := 1 to Length(s) do SendMessage(wnd, WM_CHAR, Word(s[i]), 0); end; end; |
hab noch was gefunden:
http://www.delphi-forum.de/viewtopic.php?t=2677&highlight=wmsettext
kanns leider geade nicht testen, da ich bei nem kumpel bin und mein pc zuhause steht und weiderrum ich da kein I-Net habe :D
Aber danke dir schonmal im voraus!
fuba - Fr 11.08.06 21:11
hmmm, mit den beiden tuts oben schaff ich das einfach nicht :/
Also was ich genau will:
1. es handelt sich um einen "OpenDialog" eines externen programmes
2. Das Fenster mit Hilfe von FindWindow / FindWindowEX finden (Erfolgreich)
Wie ich da sicher bin?
Mit BringWindowToTop(Handle) kommt der OpenDialog in den vordergund
3. Das Editfeld (untere Combobox) des OpenDialogs finden und Text da eintragen (genz nicht)
Ich vermute ich finde ich das handle des EditFeldes / ComboBox nicht
Also meine frage:
Wie Finde ich das Handle des unteren Editfeldes (da wo ich den Pfad b.z für *.exe) eintragen müsste
Habe nun auch WinSpy, da bekomme ich ja das handle als ID zurück oder so, wenn ja wie komme ich dann dazu diese zu benutzen?
Ich fahre jtzt mal nach hause und teste das mal mit WinSpy, da ich selbst kein I-NET habe und gerade bei meinem bruder sitze :D
Danke schonmal für antworten!
// EDIT //
Hab mir das mal bei meinem Bruder angesehen
Das Feld das ich suche ist "ComboBoxEx32"
Das wiederrum unterteilt in "ComboBox" und "Edit"
In das "Edit" will ich folgedessen ja rein Sendmessagen ;)
Das Problem ist, die ID des Edit Feldes, die ich bis jetzt mit X-Spy bekommen habe,
ändert sich bei jedem aufruf des "OpenDialog" :(
Wie bekomme ich das hin?
Nur eines ist immer Statisch:
ComboBoxEx32, ComboBox und Edit
BTW. Mein Code sieht derweil so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var TestHandle, XHandle : HWND; i : Integer; s : string; begin TestHandle := FindWindow('OpenDialog', nil); if TestHandle <> 0 then begin XHandle := FindWindowEx(TestHandle, 0, 'Edit' ,nil); s := 'Dieser Text soll in das Editfeld des OpenDialoges'; SendMessage(XHandle, WM_SETTEXT, 0, Integer(PChar(s))); end; end; |
Qwert Zuiop - Fr 11.08.06 23:42
Hi,
ich weiß nicht, ob dir das weiterhilft, aber ich habe eine weitere Möglichkeit gefunden, das Handle auf ein anderes Fenster zu bekommen. Da ich leider überhaupt keine Ahnung von diesem Thema habe, kann ich aber auch nicht entscheiden, ob das dir bei deinem Problem weiterhilft, aber vielleicht gibt es in diesem Zusammenhang auch andere Möglichkeiten, auf Objekte innerhalb des Fensters zuzugreifen. Die Funktion heißt "WindowsEnumWindows". (Ich hoffe ich verstoße jetzt nicht gegen die Regeln des Forums, wenn ich hier einen Link poste, aber ich konnte die Regeln des Forums trotz längerem Suchen nicht finden :( , man möge es mir ggf. verzeihen und mich bitte darauf hinweisen) Unter
http://www.dsdt.info/tipps/?id=633&search=findwindow gibts dazu eine genauere Anleitung.
Viel Glück für die Suche und das Programm
Qwert Zuiop
fuba - Do 17.08.06 10:06
Problem gelöst :)
Dank WinSpy habe ich es hinbekommen.
Das tool (WinSpy) nimmt dir in solchen fällen fast die ganze arbeit ab :D
Man kann sich nemlich den code für das ausgewählte fenster / fenstercomponente erzeugen lassen.
BTW. X-Spy kann das auch, aber mich persönich sricht WinSpy mehr an ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var wnd : HWND; begin wnd := FindWindow(nil, 'Fenster Title');
wnd := FindWindowEx(wnd, 0, 'ComboBox', nil);
wnd := FindWindowEx(wnd, 0, 'Edit', nil); if wnd <> 0 then begin SendMessage(XHandle, WM_SETTEXT, 0, Integer(PChar('Text'))); end; end; |
Vielen dank für eure hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!