Entwickler-Ecke

Windows API - FindWindowEx mit mehreren (identischen) Panels


Xion - Do 14.08.08 11:49
Titel: FindWindowEx mit mehreren (identischen) Panels
Hi,

über den Winspector lasse ich mir den Aufbau einer andren Anwendung zeigen. Leider gibt es für mich an einer Stelle ein Problem:
auf einer Form sind 3 Panels, alle ohne Namen und als Klasse TPanel.

Auf einem dieser Panels ist ein Button und auf einem andren sind 2 Edits die ich ansprechen möchte (bei den Edits ist das Problem ähnlich, woher kriege ich raus, welches Edit welches ist?)
Ich habe es mit einem mehrmaligen Aufruf von FindWindowEx versucht, aber es funktioniert nicht. hB ist immer das gleiche Handle.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
          while (hbtn<>0) or(hA<>0) do
            begin
              hB:=FindWindowEx(h, 0, 'TPanel', nil);
              if hBtn=0 then
                hBtn:=FindWindowEx(h, 0, 'TButton', 'Herunterladen && Konvertieren');
              if hA=0 then
                begin
                 hA:=FindWindowEx(hB,0,'TEdit',nil); //Edit1
                 hB:=FindWindowEx(hB,0,'TEdit',nil); //Edit2
                end;
             end;

h=Handle der Form

hB ist in diesem Fall immer identisch, obwohl es 3 Panels gibt.

Kann mir da jemand weiterhelfen?

Danke im Vorraus,
Xion


SvenAbeln - Do 14.08.08 12:17

Zitat:


Delphi-Quelltext
1:
hB:=FindWindowEx(h, 0, 'TPanel', nil);                    

hB ist in diesem Fall immer identisch, obwohl es 3 Panels gibt.


Du suchst mit FindWindowEx immer nach dem ersten TPanel in dem Fenster, daher bekommst du immer wieder das identische Ergebnis. Über den zweiten Parameter kannst du aber angeben, nach welchem Handle er mit der Suche beginnen soll.


Delphi-Quelltext
1:
2:
3:
hPanel1:=FindWindowEx(h, 0, 'TPanel', nil);
hPanel2:=FindWindowEx(h, hPanel1, 'TPanel', nil);
hPanel3:=FindWindowEx(h, hPanel2, 'TPanel', nil);


Xion - Do 14.08.08 12:51

aah, prima, danke :) :D :zustimm:

wenn ichs jetzt die Delphi-Hilfe nochmal lese, verstehe ichs auch :lol: ist leider auf Englisch bei D2005