Programmende und Betriebssystem Shutdown unterscheiden

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Servus.

Ich habe hier ein Applikation die nur ab und zu mal ein Fenster öffnet und vom User eine Eingabe abverlangt und den rest der Zeit im Hintergrund läuft.
Damit das Programm aber nicht abstrüzt, wenn plötzlich das Fenster weg ist, habe ich einen Eventhandler auf EVT_CLOSE, der entsprechend aussieht:

Code: Alles auswählen

def OnCloseWindow(self, event):
        if event.CanVeto():
            print "User closed window, hiding myself and abort sending"
            event.Veto()
            self.Show(False)
            self.callerApp.sendAbort()
        else:
            ## we can't veto the close-event
            ## this is not good but we will shutdown cleanly
            self.callerApp.stop()
            self.callerApp.ExitMainLoop()
Beenden werden kann (und soll) es nur über ein Taskbarmenu (Das funktioniert auch soweit).
Nun habe ich allerdings festgestellt, dass mein Programm damit auch den Shutdown des Betriebssystems verhindert (oder zumindest solange blockiert, bis selbiges den Thread abwürgt).

Gibt es eine möglichkeit zu unterscheiden, wann das Close-Event nur vom Fenster kommt, und wann es urspürnglich vom Betriebssystem kommt?
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hast du schon eine Lösung für das Problem gefunden? Würde mich auch interessieren.

Ansonsten, ein sehr gute frage! Hmm, schwer zu sagen. Hab auch schon kurz geschaut aber in der *ironie* Super und erstklassigen */ironie* Dokumentation von wxPython. Da steht darüber mal wider nichts. Ich kuck mal nachher auf wxWidgets (http://wxwidgets.org/manuals/2.6.3/wx_contents.html).

Bin mir nicht sicher, aber eigentlich müsste in der Windows-API ja so was integriert sein, das bei einem EVT_CLOSE ein entsprechende ID (oder wie man das nennt) gesendet wird, anhand man identifizieren kann ob das Event von einem Shutdown oder von einem Sauberen beenden ausgelöst wurde.

lg
Antworten