C++ (Qt)#include <QApplication>#include <QMessageBox>#include <QDebug> #include <qt_windows.h> class MyApplication : public QApplication{public: MyApplication( int argc, char ** argv ) : QApplication( argc, argv ) { } bool winEventFilter(MSG * msg, long * retVal) { if (msg->message == WM_QUERYENDSESSION ) { QMessageBox::information( NULL, "Session end", "Session end", "OK" ); *retVal = false; return true; } return false; } };
C++ (Qt)void Application::commitData(QSessionManager &sm){ timewatcher->slotWriteDataTimeToFile(); // при завершении сеанса ОС пишем данные в файл отчёта // DEBUG: проверка работы менеджера сессий// FIXME: когда все окна приложения не видны, эта функция почему-то не // вызывается при завершении работы системы.//// if(sm.allowsInteraction()) {// int r = QMessageBox::warning(timewatcher, tr("TimeWatcher"), // tr("Bla-Bla-Bla.\n" // "Do you really want to quit?"), // QMessageBox::Yes | QMessageBox::No); // if (r == QMessageBox::Yes) { // sm.release(); // } // else {// sm.cancel(); // }// }}
C++ (Qt)Application::setQuitOnLastWindowClosed(false);
#ifdef Q_WS_WIN#include <qt_windows.h>bool ServerApplication :: winEventFilter( MSG *message, long *result ){ UINT& msg = message->message; if ( msg == WM_QUERYENDSESSION || msg == WM_ENDSESSION ) { *result = 1; quit(); return true; } return QApplication::winEventFilter( message, result );}#endif