Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Problem mit EnumWindows (https://www.delphipraxis.net/52661-problem-mit-enumwindows.html)

RuX 1. Sep 2005 09:04


Problem mit EnumWindows
 
Hi, ich bin dabei etwas zu automatisieren, und das geht leider nich anders als mit Suchen von Fenstern und Senden von (Click) Botschaften.

Ich suche nach den Fenstern mit FindWindow, und sobald ich das entsprechende Fenster gefunden habe, suche ich mit EnumChildWindows die Komponenten durch um das jeweilge Control zum Clicken zu finden. Bei 2 Fenstern á 1 Button funktioniert diese Suche tadellos. Das 3te Fenster wird auch noch gefunden bloß gibt es ein problem mit EnumChildWindows.
Er geht noch in die Zeile mit EnumChildWindows, springt aber nicht in EnumChildProc. Das ParentHnd nicht stimmt kann wohl nicht sein da ich es ziemlich eindeutig über Caption und Fensterklassenname ermitteln kann. Das im Hintergrund ein Fenster existiert mit der gleichen Caption/Fensterklasse ist wohl sehr unwahrscheinlich.

Ich dacht alternativ schon an GetDlgItem, das Problem ist das laut WinSpy die ControlID des Buttons seinem Handle entspricht was wohl falsch ist.

Der Aufruf schaut so aus, und funktioniert wie gesagt 2x reibungslos :)
Delphi-Quellcode:
EnumChildWindows(ParentHnd, @EnumChildProc, LongInt(BtnCaptionE));

Christian Seehase 1. Sep 2005 11:51

Re: Problem mit EnumWindows
 
Moin RuX,

und wie sieht die EnumChildProc aus?

RuX 1. Sep 2005 12:23

Re: Problem mit EnumWindows
 
so:
Delphi-Quellcode:
function EnumChildProc(Wnd: hWnd; SearchStr: String): BOOL; stdcall;
var
  buffer: array[0..MAX_PATH] of char; //caption von button
begin
  result := Wnd <> 0;

  if result then begin
    SendMessage(wnd, WM_GETTEXT, sizeof(buffer), Integer(@buffer));
    if buffer = SearchStr then begin
      PostMessage(wnd, BM_CLICK, 0, 0);
      exit;
    end;

    EnumChildWindows(wnd, @EnumChildproc, Integer(SearchStr));
  end;
end;
aber wie gesagt er springt gar nicht erst rein bei der 3ten suche :/

RuX 1. Sep 2005 13:07

Re: Problem mit EnumWindows
 
:gruebel: hab jetzt ne lösung mit GetWindow die zu funktionieren scheint, allerdings schon sehr seltsam wieso das andere nich geht

marabu 1. Sep 2005 13:18

Re: Problem mit EnumWindows
 
Hi,

vielleicht habe ich ja gerade mein Mittagstief, aber bei dem rekursiven Aufruf vermisse ich die Übermittlung von SearchStr...

Grüße vom marabu

RuX 1. Sep 2005 15:29

Re: Problem mit EnumWindows
 
sehr aufmerksam von dir.
hab ich beim schönmachen des codes für dp, aus versehn falsch hingemacht, is aber bei mir richtig :)
insofern leider kein fehler :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz