Pc herunterfahren



  • Moin

    Gibt es in C++ einen Befehl,mit dem man unter Windows den Pc herunterfahren kann?

    Mit der Suchfuntion hab ich leider nichts gefunden.

    Thx im vorraus 🤡



  • ExitWindowsEx(EWX_POWEROFF+EWX_FORCE, 0);
    

    Musst dir vorher aber die nötigen Privilegien besorgen 😃



  • erstmal Danke für die Antwort 😃

    welche Privilegien muss ich mir besorgen?



  • Nuja... hatte vor ner Woche oder so mal folgendes im MFC Subforum gepostet... funzt einwandfrei:
    hier mal zwei mögliche Lösungen:

    // 1. Lösung 
    bool MySystemShutdown(void) 
    { 
        ::HANDLE hToken; 
        ::_TOKEN_PRIVILEGES tkp; 
    
        if(!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
            return false; 
    
        ::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); 
    
        tkp.PrivilegeCount            = 1; 
        tkp.Privileges[0].Attributes  = SE_PRIVILEGE_ENABLED; 
    
        ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); 
    
        if(::GetLastError() != ERROR_SUCCESS) 
            return false; 
    
        if(!::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_FLAG_PLANNED)) 
            return false; 
    
        return true; 
    }
    
    // 2. Lösung 
    bool SystemShutdown(LPTSTR lpszMessage) 
    { 
        ::HANDLE hToken; 
        ::_TOKEN_PRIVILEGES tkp; 
    
        if(!::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
            return false; 
    
        ::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); 
    
        tkp.PrivilegeCount        = 1;   
        tkp.Privileges[0].Attributes    = SE_PRIVILEGE_ENABLED; 
    
        ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
    
        if(::GetLastError() != ERROR_SUCCESS) 
            return false; 
    
        if(!::InitiateSystemShutdown(NULL, lpszMessage, 20, TRUE, FALSE);) 
            return false; 
    
        tkp.Privileges[0].Attributes = 0; 
        ::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
    
        return true; 
    }
    

    So... die erste Methode fährt Windows ganz normal herunter... also als ob man selbst den herunterfahren Dlg geöffnet hätte und dort Herunterfahren bestätigthätte...

    Das 2. zeigt einen Dlg, der eine Zeit lang dort ist... in diesesn Dlg kannst auch ne Message ausgeben... und nach der Zeit fährt er runter...



  • Unter Windows XP kann man auch das Programm shutdown.exe starten:

    system("shutdown.exe -s -t00");
    


  • Unter Windows XP kann man auch das Programm shutdown.exe starten:

    system("shutdown.exe -s -t00");
    


  • tja.. wir sind hier aber im WinAPI Forum... system ist nen überbleibsel aus Zeiten in denen man die Konsole benutze... Wenn dann ShellExecute... wobei das noch längst net so sauber ist wie die beiden Lösungen die ich oben gepostet hab 🙂



  • Hallo...

    ich will nen shutdowntimer proggen...soweit so gut...aber...bei der forensuche bin ich auf diesen thread gestoßen, bei dem es ums herunterfahren geht...doch wenn ich den Code den (D)Evil gepostet hat (lösung 1) in mein prog einbaue hagelt es fehlermeldungen ohne ende...

    meine frage(n) daher

    kann ich diesen code auch in C verwenden oda ist er ausschließlich für C++?

    thx



  • Sind alles ganz normale WinAPI Funktionen 😉 Zeig mal die Fehlermeldungen...

    PS: Nice das de die Forensuche benutzt hast... mal nen vernünftiger Member 🙂



  • ausschliesslich in c++ du musst den code zu c portieren



  • ??? 😮

    ok...danker erstma...

    muss ich meinen code anpassen oda den code der gepostet wurde...

    naja eigl egal...ich kann nur C und habe keine ahnung wie ich das anpassen sollte 😞

    aba evtl kennt hier jemand noch eine andere möglichkeit...

    ich habe auch das mit

    system("shutdown.exe -s -t00");
    

    probiert aba irgendwie geht das net...

    also ich würde mich üpber alles freuen...thx



  • jetzt habe ich ganz vergessen die fehlermeldungen zu posten...ups 🙄

    ok...

    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:11: error: syntax error before "MySystemShutdown"
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:11: warning: data definition has no type or storage class
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c: In function main': E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:51: warning:return' with a value, in function returning void
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:25: warning: return type of 'main' is not `int'

    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c: At top level:
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:115: error: syntax error before "MySystemShutdown"
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c: In function MySystemShutdown': E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:117: error: syntax error before ':' token E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:120: error: syntax error before ':' token E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:125: error:tkp' undeclared (first use in this function)
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:125: error: (Each undeclared identifier is reported only once
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:125: error: for each function it appears in.)
    E:\Downloads\Cstuff\Programme\Shutdowntimer\Shutdowntimer.c:126: error: SE\_PRIVILEGE\_ENABLED' undeclared (first use in this function) E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:128: error: syntax error before ':' token E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:130: error: syntax error before ':' token E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:133: error: syntax error before ':' token E:\\Downloads\\Cstuff\\Programme\\Shutdowntimer\\Shutdowntimer.c:136: error:true' undeclared (first use in this function)

    habe einfach mal alles reingemacht...also meist syntax error aba ich habe den code ja überniommen...wie gesagt ich muss das in C machen...evtl kommen daher die fehler...

    thx



  • Warum lest ihr d*m*e* S*a*t*s nie was man schreibt? Kopier die verd*m*e*n Fehlermeldungen mal hierrein!



  • du musst eine namespace reduktion durchführen da besagtes feature in c so nicht verfügbar ist.



  • Was ich sagen wollte ist du musst die :: überall wegmachen. 🤡



  • (D)Evil schrieb:

    Warum lest ihr d*m*e* S*a*t*s nie was man schreibt? Kopier die verd*m*e*n Fehlermeldungen mal hierrein!

    ??? kA, was du willst...hab doch die fehler gepostet...und die sternechen störn mich beim lesen von was auch imma das sein soll...

    @ General C++

    habe ich gemacht, also alle "::" wech, allerdings habe ich jetzt imma die fehler meldung

    blabla 'undeclared (first use in this function)
    

    ok heisst das ich die halt noch deklarieren muss...aba als was?

    [fals ihr euch wundert über meinen fragen, bin noch relativ neu auf dem gebiet der programierung]

    thx



  • Jo... hatte aber schon gepostet als das da noch net stand 😉 Also... hast de die Header drin.,.. hab die oben garnet dazugeschrieben sehe ich gerade... also... MSDN Library und die Funktionen nachgucken... da steht der Header unten bei,...



  • np... 🙂

    danke...das hat mir sehr geholfen... 👍 👍

    schönen abend noch

    THX 🙂


Anmelden zum Antworten