Wie logge ich ein Herunterfahren von Windows?
-
Hallo,
ich hab schon gesucht, aber nichts dazu gefunden.
Ich habe ein Programm, daß (in einer Datei) mitloggt, wenn der Computer angeschaltet wird (Programm steht in Autostart). Danach läuft es im Hintergrund und sollte natürlich auch mitloggen, wenn der Computer heruntergefahren wird.
Wird das Programm regulär beendet, kann der Zeitpunkt in die Datei geschrieben werden. Fahr ich Windows einfach so runter, geschieht dies nicht. Gibt es hier eine Möglichkeit, dies noch vorher zu tun oder beendet Windows einfach total den Prozess und man kann gar nicht mehr darauf reagieren?
Für eine kleine Hilfe wäre ich sehr dankbar,
Mipe
-
Nachricht
WM_QUERYENDSESSION WM_ENDSESSION
bearbeiten.
Du gisbt bei WM_QUERYENDSESSION FALSE zurück, damit Windows NICHT beendet wird.
Logge deine Daten.
Wenn du fertig bist, sendest Du einen neues Shutdown Kommando (ExitWindows bzw. ExitWindowsEx) und gibst bei WM_QUERYENDSESSION TRUE zurück.Du solltest auch die Nachricht WM_ENDSESSION beachten.
Diese schickt Windows nach der WM_QUERYENDSESSION.
Ist wParam == TRUE ist, waren alle Anwendungen einverstanden, Windows gleich zu beenden.Beispiel:
//************************************************************************** // headerfile //************************************************************************** #ifndef _SHUTDOWNDLG_H_ #define _SHUTDOWNDLG_H_ //************************************************************************** class CShutdownDlg : public CDialog { public: CShutdownDlg(CWnd* pParent = NULL); // standard constructor enum { IDD = IDD_SHUTDOWN_DIALOG }; protected: afx_msg void OnBtnShutdown(); afx_msg BOOL OnQueryEndSession( ); DECLARE_MESSAGE_MAP() }; //************************************************************************** #endif //************************************************************************** //************************************************************************** //**************************************************************************
und
//************************************************************************** // implementation file //************************************************************************** #include "Shutdown.h" #include "ShutdownDlg.h" //************************************************************************** // //************************************************************************** CShutdownDlg::CShutdownDlg(CWnd* pParent /*=NULL*/) : CDialog(CShutdownDlg::IDD, pParent) { } //************************************************************************** // //************************************************************************** BEGIN_MESSAGE_MAP(CShutdownDlg, CDialog) ON_BN_CLICKED(IDC_BTN_SHUTDOWN, OnBtnShutdown) ON_WM_QUERYENDSESSION() END_MESSAGE_MAP() //************************************************************************** // //************************************************************************** void CShutdownDlg::OnBtnShutdown() { ExitWindows(FALSE,FALSE); } //************************************************************************** // //************************************************************************** afx_msg BOOL CShutdownDlg::OnQueryEndSession() { return (MessageBox("Benutzer abmelden ?","",MB_YESNO)==IDYES); } //************************************************************************** //************************************************************************** //**************************************************************************
ExitWindows
Syntax:
BOOL ExitWindows(DWORD dwReserved, UINT uReserved);
Rückgabewert
BOOL
TRUE, wenn erfolgreich, sonst FALSE
Parameter:
Beide Parameter sind reserviert und müssen NULL sein.ExitWindowsEx
Syntax:
BOOL ExitWindowsEx(UINT uOptions, DOWRD dwReserved);
Rückgabewert
BOOL
TRUE, wenn erfolgreich, sonst FALSE
Parameter:
UINT uOptions
EWX_FORCE
erzwingt das beenden von nicht antworteten ProzessenEWX_FORCEIFHUNG
Ewering das Beenden von Prozessen, die nicht auf WM_QUERYENDSESSION bzw WM_ENDSESSION antworten ab Win2000EWX_LOGOFF
Beendet die Anwedung des aktuellen Users und meldet diesen ab.EWX_POWEROFF
Fährt Windows nieder und schaltet den PC ab.
Ab Win 2000 muss man über das Privileg SE_SHUTDOWN_NAME verfügen.EWX_REBOOT
Neustart des Systems
Ab Win 2000 muss man über das Privileg SE_SHUTDOWN_NAME verfügen.EWX_SHUTDOWN
Fährt den PC nieder, das er abgeschaltet werden kann.
Ab Win 2000 muss man über das Privileg SE_SHUTDOWN_NAME verfügen.DWORD dwReserved
wird ignoriert.