Hallo Alex
Nun ja, den Originalcode kann ich nicht grad posten (der ist ziemlich verstreut), aber ich mache es folgendermassen:
-
Als erstes starte ich ein fremdes Programm mit shell und halte die
zurückgelieferte Task-ID fest
-
Durchsuche mit FindWindow/GetWindow alle Fenster:
das Handle des ersten ‚Haupt‘-Fensters das zum
gestarteten Task gehört
(geprüft durch GetWindowThreadProcessId und GetParent 0)
wird gepflückt, die Schleife abgebrochen.
[Ob das richtige Fenster gepflückt wurde habe ich bereits geprüft
in dem ich mir die Caption mit GetWindowText anzeigen lasse -
soweit positiv]
-
Dann verwende ich EnumChildWindows um alle Fenster innerhalb
des Hauptfensters zu enumerieren. In der Callback-Funktion erhalte
ich jeweils das Fensterhandle des Enumerierten Controls/Windows.
Wenn das Enumerierte Control/Window von der Klasse „MDIClient“ ist,
wird über das Control/Window-Handle IsWindowVisible und
IsWindowEnabled abgeführt. Es wird zwar während der Enumerierung
ein Control/Window gefunden das von der Klasse „MDIClient“ ist,
IsWindowEnabled und IsWindowVisible liefern aber jeweils immer 1,
auch wenn das betreffende MDI-Formular sich im geschlossenen
oder verstecktem Zustand* befindet.
* Für die ganzen Tests habe ich mir einen Teststumpf-Programm ebenfalls mit VB geschrieben: Ein MDIFormular mit einem MDIChildformular - ein paar Buttons wie MDIChild entladen (unload), laden (load), anzeigen (show), verstecken (hide).
Während ich ich hier schreibe ist mir gerade so eine Vermutung duch den Kopf gegangen: ist die API IsWindowVisible vielleicht nur für die „Hauptformulare“ (sprich letzter Parent) gedacht?
Auch GetWindowText und SendMessage+WM_GETTEXT haben die Formcaption nicht ermitteln können (sie können’s zwar vom Hauptfenster des Teststumpfs, aber nicht vom MDIClient).
Brachte das ein wenig Licht ins dunkel?
Wenn nein … mache ich eine kleine Testroutine (wird aber wahrscheinlich erst im Verlauf der Woche irgendwann dazukommen)
Freu mich auf die Antwort (so oder so 
Besten Dank schon mal
Gruss
Patrick
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]