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 Prozessen

    EWX_FORCEIFHUNG
    Ewering das Beenden von Prozessen, die nicht auf WM_QUERYENDSESSION bzw WM_ENDSESSION antworten ab Win2000

    EWX_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.


Anmelden zum Antworten