Code ausführen, wenn System heruntergefahren wird
Verfasst: 2. Februar 2009 17:15
Hallo!
ich habe folgendes Problem:
mein Programm läuft hauptsächlich im System Tray, Fenster ist (die meiste Zeit) keines geöffnet. Wenn man das Programm beendet (etwa über das Kontextmenü des System-Tray-Icons) wird ein Eintrag in einer Art Log-Datei geschrieben.
Fährt der Benutzer nun aber den Rechner herunter, schreibt das Programm keinen Eintrag in das Logfile, was es aber tun sollte. Ich habe entsprechenden Code zwar im Destruktor des Hauptfensters (MainForm, ein QMainWindow) stehen, der Code wird aber nicht aufgerufen (warum nicht?).
QSystemTrayIcon kennt kein CloseEvent(), das man überladen könnte.
Und der Versuch, QCoreApplication::aboutToQuit() abzufragen, hat auch nicht geklappt:
Windows-Events möchte ich eigentlich auch nicht abfragen. Habe ich aber auch mit diesem Code erfolglos versucht:
Vielleicht kennt ihr ja noch eine Variante, die ich noch probieren könnte.
Stutzig macht mich, dass der Code im Destruktor nicht aufgerufen wird, wenn das System herunterfährt. Sollte der Code nicht in jedem Fall gestartet werden, schließlich muss der Destruktur ja aufgerufen werden, wenn die Instanz dealloziert wird?!
Grüße
wijaa
ich habe folgendes Problem:
mein Programm läuft hauptsächlich im System Tray, Fenster ist (die meiste Zeit) keines geöffnet. Wenn man das Programm beendet (etwa über das Kontextmenü des System-Tray-Icons) wird ein Eintrag in einer Art Log-Datei geschrieben.
Fährt der Benutzer nun aber den Rechner herunter, schreibt das Programm keinen Eintrag in das Logfile, was es aber tun sollte. Ich habe entsprechenden Code zwar im Destruktor des Hauptfensters (MainForm, ein QMainWindow) stehen, der Code wird aber nicht aufgerufen (warum nicht?).
QSystemTrayIcon kennt kein CloseEvent(), das man überladen könnte.
Und der Versuch, QCoreApplication::aboutToQuit() abzufragen, hat auch nicht geklappt:
Code: Alles auswählen
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveToFile()));Code: Alles auswählen
virtual bool MainForm::winEventFilter(MSG* msg, long* result) {
if(msg->message == WM_QUERYENDSESSION) {
*result = 1;
saveToFile();
return true;
}
return false;
};
Stutzig macht mich, dass der Code im Destruktor nicht aufgerufen wird, wenn das System herunterfährt. Sollte der Code nicht in jedem Fall gestartet werden, schließlich muss der Destruktur ja aufgerufen werden, wenn die Instanz dealloziert wird?!
Grüße
wijaa