Autor Beitrag
fuba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Fr 11.08.06 14:59 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Fr 11.08.06 15:09 
Guck dir dazu mal SendMessage an.
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Fr 11.08.06 15:19 
user profile iconazubi_20 hat folgendes geschrieben:
Guck dir dazu mal SendMessage an.


Danke ich denk mal ich habs gefunden.

Bisschen in google gesucht und das gefunden:

ausblenden 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:
www.delphi-forum.de/...;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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7 Pers. (Englisch)
BeitragVerfasst: 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 www.dsdt.info/tipps/...mp;search=findwindow gibts dazu eine genauere Anleitung.

Viel Glück für die Suche und das Programm

Qwert Zuiop
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: 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 ;)

ausblenden 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 
  //hier wird das hauptfenster gesucht 
  wnd :=  FindWindow(nil'Fenster Title');  

  //hier dann die combobox WORIN sich das editfeld befindet
  wnd :=  FindWindowEx(wnd, 0'ComboBox'nil);

  //hier dann DAS Edit-Feld das ich gescuht habe  
  wnd :=  FindWindowEx(wnd, 0'Edit'nil);
  if wnd <> 0 then 
  begin
    //hier wird dann der gewünschte Text dan das EDIT-Feld gesendet 
    SendMessage(XHandle, WM_SETTEXT, 0, Integer(PChar('Text')));  
  end;  
end;


Vielen dank für eure hilfe!