![]() |
[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:
Die IsChild Funktion kann ich nicht verwenden, da sie das Parent-Handle erwartet.
if IsWindow(Handle)=False then //Keine Message senden
if GetParent(Handle)=Handle then //Keine Message senden 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: |
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.
|
Re: Überprüfen ob ein Fenster(Handle) ein Child ist
Wie meinst du das?
:arrow: Ich ermittle die Handles ja bereits mittels EnumWindows. |
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. |
Re: Überprüfen ob ein Fenster(Handle) ein Child ist
Hallo
Ich habe mir meine EnumWindows-Funktion nochmals angesehen, sie war fehlerhaft. Mittels ![]() 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