AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetParent mit fremden Fenster - Was nach Programmabsturz?

SetParent mit fremden Fenster - Was nach Programmabsturz?

Ein Thema von F.W. · begonnen am 23. Mär 2008 · letzter Beitrag vom 23. Mär 2008
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

SetParent mit fremden Fenster - Was nach Programmabsturz?

  Alt 23. Mär 2008, 19:46
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?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 19:51
Hallo, ein Childfenster existiert nur so lange wie das Parentfenster.
Wird das Parent zerstört, wird folglich auch das Child zerstört.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#3

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 19:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 20:21
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)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#5

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 20:24
Kann man der VCL sagen, dass sie dieses Fensterhandle in Ruhe lassen soll?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 20:26
das hat nichts mit der vcl zu tun sondern mit dem Betriebssystem.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 20:34
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.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#8

Re: SetParent mit fremden Fenster - Was nach Programmabsturz

  Alt 23. Mär 2008, 21:09
Hmm, dann ist das Spiel trotzdem vergeigt.
Nagut, dann such ich nach Möglichkeiten mein Programm Absturzresistent zu machen

Danke
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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