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 SetParent mit fremden Fenster - Was nach Programmabsturz? (https://www.delphipraxis.net/110733-setparent-mit-fremden-fenster-nach-programmabsturz.html)

F.W. 23. Mär 2008 19:46


SetParent mit fremden Fenster - Was nach Programmabsturz?
 
Ich setze den Parent eines Fensters, welches nicht von meiner Anwendung stammt, auf mein Hauptfenster.
Wenn meine Anwendung jetzt aber durch einen Programmabsturz (oder wegen gewaltsamen Beenden per Taskmanager) beendet wird, habe ich ja keine Chance das fremde Fenster wieder "frei zu lassen", also dessen Parent wieder auf 0 zu setzen.

Wie kann ich sicher gehen, dass wenigstens wenn mein Programm neugestartet wird, ich das fremde Fenster wieder ans Tageslicht befördern kann?

Ich habe versucht beim SetParent-Aufruf das Handle des fremden Fensters in einer Ini-Datei zu speichern und wenn mein Programm gestartet wird und diese Datei existiert, dann soll es das per SetParent(WindowHandle, 0) wieder zu dem machen, was es vorher war, ein Toplevel Window, aber das funktioniert scheinbar nicht.

Kann mir jemand eine Strategie vorschlagen?
Was wird aus dem fremden Fenster, wenn meine Anwendung aus dem Speicher genommen wird?

toms 23. Mär 2008 19:51

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Hallo, ein Childfenster existiert nur so lange wie das Parentfenster.
Wird das Parent zerstört, wird folglich auch das Child zerstört.

F.W. 23. Mär 2008 19:54

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Es handelt sich bei dem "Childfenster" also bei der fremden Anwendung um ein Spiel. Nun höre ich die Musik des Spiels weiter, auch wenn es "zerstört" wurde. Auch die Exe läuft weiter. Kann es nicht sein, dass es noch irgendwie tief im System schlummert? Denn normalerweise (sende ich WM_CLOSE) an das Fenster, wird das Spiel richtig beendet.

toms 23. Mär 2008 20:21

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Zitat:

Zitat von F.W.
Es handelt sich bei dem "Childfenster" also bei der fremden Anwendung um ein Spiel. Nun höre ich die Musik des Spiels weiter, auch wenn es "zerstört" wurde. Auch die Exe läuft weiter. Kann es nicht sein, dass es noch irgendwie tief im System schlummert? Denn normalerweise (sende ich WM_CLOSE) an das Fenster, wird das Spiel richtig beendet.

Wenn das Handle nicht mehr existiert, existiert das Fenster auch nicht mehr.
Ganz einfach zu testen mit IsWindow(FensterHandlevorCrash)

F.W. 23. Mär 2008 20:24

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Kann man der VCL sagen, dass sie dieses Fensterhandle in Ruhe lassen soll?

SirThornberry 23. Mär 2008 20:26

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
das hat nichts mit der vcl zu tun sondern mit dem Betriebssystem.

toms 23. Mär 2008 20:34

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Fazit: Das Childfenster ist weg. Dein Programm könnte im Falle eines Absturzes beim Neustart die EXE aus dem Speicher nehmen (beenden), und die Childanwendung neu starten.

F.W. 23. Mär 2008 21:09

Re: SetParent mit fremden Fenster - Was nach Programmabsturz
 
Hmm, dann ist das Spiel trotzdem vergeigt.
Nagut, dann such ich nach Möglichkeiten mein Programm Absturzresistent zu machen ;-)

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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