joerns
Goto Top

Herausfinden, ob sich ein Fenster auf dem Desktop befindet

(Visual Basic)

Hallo ihr Experten!

bei Visual Basic gibt es ja die Funktion
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
auf jeden Fall kann man das Fenster damit "woanders hinsetzen", also z.b. in ein bild bzw. alles was eine Hwnd hat. Dann gibt es noch die Funktion
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
mit der man das Übergeordnete Fenster rausfinden kann. doch irgendwie klappt es bei mir nicht, damit herauszufinden, ob das fenster auf dem Desktop liegt. Ich bekomme immer nur den Rückgabewert 0. Kann mir jemand helfen?

thx
js

Content-Key: 40285

Url: https://administrator.de/contentid/40285

Printed on: April 19, 2024 at 19:04 o'clock

Member: MacBest
MacBest Sep 17, 2006 at 08:24:09 (UTC)
Goto Top
Hallo JS,

die von Dir genannten Funktionen haben nichts mit der Sichtbarkeit zu tun. Bei dem Hauptfenster einer Anwendung wird Dir GetParent stets anzeigen, dass es keinen Parent mehr hat. (Er könnte aber sehr wohl noch einen Owner haben.) Durch Abfragen des WS_VISIBLE-Flags erfährst Du, was Du suchst. Das geht natürlich mit GetWindowLong. Für die Abfrage dieses Flags gibt es aber sogar eine eigene Funktion, und zwar IsWindowVisible. Falls Dir die Deklaration fehlen sollte, besorg Dir bitte den ApiViewer.
Member: joerns
joerns Sep 17, 2006 at 20:06:03 (UTC)
Goto Top
nee darum geht es mir nicht
ich will nur herausfinden, ob sich das fenster, das ich in ein anderes gesetzt habe, noch dort befindet oder sich vielleicht auf den desktop zurückgesetzt hat (sowas solls schon geben).
Aber ich glaube ich mach es andersrum: Ich lass mir alle Childs (müssten doch eigentlich Children heissen...) von dem Fenster, wo ich es reingesetzt hab anzeigen. Wenn es nicht dabei ist, stimmt wohl was nicht...
js
Member: MacBest
MacBest Sep 17, 2006 at 22:09:08 (UTC)
Goto Top
JS,

dann sieht es so aus, dass Du die Parent-Child-Relation nicht korrekt setzt. Aber das dürfte Dir inzwischen EnumChildWindows gezeigt haben. Der Punkt ist, dass der einfache Aufruf von SetParent allein nicht genügt, damit die neue Relation korrekt registriert wird. Du musst vorher den Fensterstil WS_CHILD via SetWindowLong setzen.