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/)
-   -   Delphi [Eledigt] Überprüfen ob ein Fenster(Handle) ein Child ist (https://www.delphipraxis.net/24982-%5Beledigt%5D-ueberpruefen-ob-ein-fenster-handle-ein-child-ist.html)

Fellmer Lloyd 29. Jun 2004 13:00


[Eledigt] Überprüfen ob ein Fenster(Handle) ein Child ist
 
Hallo!

Ich habe ein Programm geschrieben, mit welchem man diverse Fenster verbergen/anzeigen kann. Um dies zu erreichen sende ich eine Message (SW_Hide/SW_Show) an das betroffene Handle.
Ich suche das Handle mittels Fensterklasse (z.B 'IEFrame').

Es klappt im Prinzip auch alles gut, bei einigen Programmen tritt jedoch folgender fehler auf:
Hat das fremde Anwendungsfenster irgend ein zweites Handle mit dem gleichen Klassennamen, wird dieses irgendwie vom "Hauptfenster" gespaltet. Das heisst man sieht nach der SW_Show Message ein zweites, kleines Fenster dass keinen Inhalt hat. :?

Ich nehme an, das mein Programm an ein "Child-Handle" eine eigene Message sendet, und daher dieser Effekt auftritt.

Gibt es eine Möglichkeit zu überprüfen, ob das Handle ein wirkliches Fenster ist, oder ein Child?
Oder liegt das problem möglicherweise an einem andere Ort?

Mit folgenden Überprüfungen bin ich bis jetzt gescheitert:
Delphi-Quellcode:
if IsWindow(Handle)=False then //Keine Message senden
if GetParent(Handle)=Handle then //Keine Message senden
Die IsChild Funktion kann ich nicht verwenden, da sie das Parent-Handle erwartet.

Hmm... irgendwie habe ich das Gefühl, das Problem liegt wo anders. :gruebel:

Falls erwünscht kann ich ein kleines Demo-Projekt erstellen. Ich glaube ich habe mich kompliziert ausgedrückt, wie immer :stupid:

TStringlist 29. Jun 2004 13:19

Re: Überprüfen ob ein Fenster(Handle) ein Child ist
 
eventuell könntest du ja zuerst nochmal kurz mittels EnumWindows checken, ob eine jeweilige Handle auch wirklich als top-level-Window bestätigt wird.

Fellmer Lloyd 29. Jun 2004 13:44

Re: Überprüfen ob ein Fenster(Handle) ein Child ist
 
Wie meinst du das?
:arrow: Ich ermittle die Handles ja bereits mittels EnumWindows.

TStringlist 29. Jun 2004 16:09

Re: Überprüfen ob ein Fenster(Handle) ein Child ist
 
EnumWindows gibt jedenfalls nur Handles von top-level Windows zurück und keine von Childs, und darum ging es doch imo teilweise auch irgendwie, oder? Das Prob tritt also bei den top-level Windows auf, die auch zusätzlich dann noch von 'IsWindow' als Windows bestätigt werden? Hmmm.

...Aber wenn du sowieso EnumWindows benutzt, solltest du eigentlich auch erst gar nicht an ein von dir erwähntes zweites Handle des Fensters mit dem gleichen Klassennamen rankommen können. Eventuell speicherst du dir ja zuerst mal alle über EnumWindows gelieferten Handles ab und wenn du danach nochmal irgendwie "Handles mittels Fensterklassen (z.B 'IEFrame')" suchst, nimmst du halt nur solche, die zuvor auch schon vom EnumWindows als top-level-windows bestätigt wurden.

Fellmer Lloyd 30. Jun 2004 08:17

Re: Überprüfen ob ein Fenster(Handle) ein Child ist
 
Hallo

Ich habe mir meine EnumWindows-Funktion nochmals angesehen, sie war fehlerhaft.
Mittels diesem Post konnte ich sie korrigieren.

Danke für deine Hilfe :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.

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