Shutdown selbst einleiten (mit QueryEndSession)?



  • Hi!
    Ich bin gerade dabei ein Programm zu schreiben dass sich beim Hochfahren selbst startet und mir in einer Datei protokolliert wie lange ich immer am Rechner sitze...damit ich nicht immer die Zeiten aufschreiben muss *g*
    Um mal eine Statistik darüber zu führen und die Übung mit der WinAPI nicht zu verlieren, weil ich daweil nur fürs Studium mit Java programmieren muss...
    soweit so gut...
    Ich wollte das Programm jetzt um die Funktion "Shutdown in n-minutes" erweitern
    Also dass ich eingeben kann in wie vielen Minuten der Rechner herunterfahren soll...
    Ist ja eigentlich auch leicht, Eingabe-Timer-Shutdown...
    Allerdings habe ich beim Shutdown das Problem dass ich nicht weiß wie das unter Windows am Besten zu realisieren ist...

    Ich hab in der MSDN nur QueryEndSession gefunden...

    1.)
    Hab ich es so richtig verstanden dass die WM gesendet wird wenn der PC heruntergefahren wird...? Wenn ja könnte ich die Message in meinem Programm abfangen, die vergangene Zeit speichern und das Programm beenden?

    2.)
    Wenn ich nun die Shutdown-Funktion implementieren will, kann ich dann die QueryEndSession, selbst verschicken wodurch der PC heruntergefahren wird, oder ist die WM nur eine Folge des Herunterfahrens-Prozesses?
    Wenn ja wie verschicke ich die am Besten? Oder kennt ihr eine Funktion um den PC herunterzufahren?

    Wäre super wenn ihr mir helfen könntet



  • Kuldren schrieb:

    Ich bin gerade dabei ein Programm zu schreiben dass sich beim Hochfahren selbst startet und mir in einer Datei protokolliert wie lange ich immer am Rechner sitze...damit ich nicht immer die Zeiten aufschreiben muss *g*

    Warum liest Du nicht einfach das Event-Log aus... da steht alles drin...

    Kuldren schrieb:

    Ist ja eigentlich auch leicht, Eingabe-Timer-Shutdown...
    Allerdings habe ich beim Shutdown das Problem dass ich nicht weiß wie das unter Windows am Besten zu realisieren ist...

    InitiateSystemShutdown oder ExitWindows(Ex)
    Steht glaub auch was in der FAQ dazu drin...



  • Warum liest Du nicht einfach das Event-Log aus... da steht alles drin...

    Wusste nicht dass es sowas gibt, bzw. ich bastle das Programm ja nur zur Übung, aber wie kann ich auf das Event Log zugreifen?

    InitiateSystemShutdown oder ExitWindows(Ex)
    Steht glaub auch was in der FAQ dazu drin...

    Hab was für NT 4.0 gefunden...ist das für XP/ME gleich?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39359.html
    Bei dem Beispielcode gibt es als Parameter ein "TObject *Sender"...leider kann ich damit gar nichts anfangen..





  • bzgl. EventLog...
    Danke!
    Werde mir mal alles ansehen!

    Wegen Shutdown..werde ich auch versuchen zu implementieren!

    Danke auf jeden Fall für die schnelle Antwort!



  • hmm das mitm Shutdown ist eigentlich ganz einfach 🙂

    #include <windows.h>
    
    /**************************************************/
    /* - EWX_LOGOFF: Logoff the current user.         */
    /* - EWX_RESTART: Simply restart the computer.    */
    /* - EWX_SHUTDOWN: Shut down but 'AT' style.      */
    /* - EWX_POWEROFF: Shut down but 'ATX' style.     */
    /* - EWX_FORCE: Force.                            */
    /* - EWX_REBOOT: Reboot.                          */
    /**************************************************/
    void ShutdownSystem(UINT uFlags = EWX_POWEROFF);
    
    void ShutdownSystem(UINT uFlags)
    {
        HANDLE           hToken; 
        TOKEN_PRIVILEGES tknpriv;
    
        OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tknpriv.Privileges[0].Luid);
        tknpriv.PrivilegeCount = 1;
        tknpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, false, &tknpriv, 0, (PTOKEN_PRIVILEGES)NULL, 0);
        ExitWindowsEx(uFlags, 0);
    }
    



Log in to reply