PC Herunterfahren in einer bestimmten anzahl von Sekunden



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mhhm hab die befehle vorher noch nie gesehen 😞

    Ich hab das mal so gemacht:

    #include <iostream>
    using namespace std; 
    
    int start(); 
    
    int main() 
    
    { 
    start(); 
    getchar(); 
    } 
    
    //--------------------------------------------------------------------------- 
    
        start() 
        {
            int sec;
    
            cout<<"Programm zum PC Herunterfahren in einer bestimmten zeit\n";
            cout<<"\n"; 
    
            cout<<"Anzahl der Sekunden eingeben wann der PC herunterfahren soll: \n"; 
            cin>>sec; 
    
            Sleep(sec * 1000);
            ExitWindowsEx(EWX_SHUTDOWN, 0);
    
            return 0; 
        }
    

    Aber dann bekomme ich diese Fehlermeldungen:

    Erzeugen
    [C++ Fehler] Unit1.cpp(27): E2268 Aufruf der undefinierten Funktion 'ExitWindowsEx'
    [C++ Fehler] Unit1.cpp(27): E2451 Undefiniertes Symbol 'EWX_SHUTDOWN'



  • also ein wenig in der msdn nachsehen könntest du schonmal.. da steht eindeutig:

    Header: Declared in Winuser.h; include Windows.h.

    also:

    #include <windows.h>
    

    und dann sollte es funktionieren..



  • Das Programm staret jetzt aber wenn ich z.b. 1000 eingebe dann passier überhaupt nichts o_O

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int start(); 
    
    int main() 
    
    { 
    start();
    getchar(); 
    } 
    
    //--------------------------------------------------------------------------- 
    
        start() 
        {
            int sec;
    
            cout<<"Programm zum PC Herunterfahren in einer bestimmten zeit\n";
            cout<<"\n"; 
    
            cout<<"Anzahl der Sekunden eingeben wann der PC herunterfahren soll: \n"; 
            cin>>sec;
    
            Sleep(sec * 1000);
            ExitWindowsEx(EWX_SHUTDOWN, 0);
    
            return 0; 
        }
    


  • hast du schonmal überlegt was

    Sleep(sec * 1000);
    

    bedeutet? das heißt du musst sekunden eingeben. 🙄 bei shutdown -s -f -t x musst du millisekunden für x eingeben. sleep erwartet auch millisekunden, deswegen wird der wert, den du eingibst mit 1000 multipliziert...



  • Ich hab da jetzt mal eine 1 eingeben 1*1000 ergibt ja 1000 ^^

    Aber das funktioniert wieder nicht oder mach ich wieder was falsch -.- ?



  • och man, ich hab doch vorhin schon geschrieben, dass du EWX_FORCE mit angeben sollst. sonst fährt das prog den rechner erst runter, wenn alle programme geschlossen sind... also:

    ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
    


  • Geht noch immer nicht ...........
    das einzigste was passiert das ist das dass Programm ausgeht.

    #include <windows.h>
    #include <iostream> 
    using namespace std; 
    
    int start(); 
    
    int main() 
    
    { 
    start(); 
    getchar(); 
    } 
    
    //--------------------------------------------------------------------------- 
    
        start() 
        { 
            int sec; 
    
            cout<<"Programm zum PC Herunterfahren in einer bestimmten zeit\n"; 
            cout<<"\n"; 
    
            cout<<"Anzahl der Sekunden eingeben wann der PC herunterfahren soll: \n"; 
            cin>>sec; 
    
            Sleep(sec * 1000); 
            ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
    
            return 0;
        }
    


  • Du solltest
    InitiateSystemShutdown
    verwenden!



  • Und beachte, dass Du vorher die nötigen Rechte Dir verschaffen musst!

    http://msdn2.microsoft.com/en-us/library/aa376861



  • In der MSDN steht auch warum ...

    Windows NT: To shut down or restart the system, the calling process must use theAdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, seePrivileges.

    Windows 95: ExitWindowEx does not work from a console application, as it does on Windows NT.

    Such einfach mal bei google nach ExitWindowEx da gibt es schon haufen weise fertige funktionen die das mit den Rechten usw. alles machen. Zu hause hab ich auch welche bin aber leider auf Arbeit.

    schirrmie



  • ok thx



  • Hab mal was zusammengefrickelt.. obs so funzt, weiß ich nicht...

    HANDLE hToken;
        TOKEN_PRIVILEGES tPrivs;
    
        // Token auf den aktuellen Prozess ermitteln
        OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY, &hToken);
    
        // Ermitteln der eindeutigen ID der SE_SHUTDOWN_PRIVILEGES
        LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &tPrivs.Privileges[0].Luid);
    
        // Setzen des Privilegs
        tPrivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        tPrivs.PrivilegeCount = 1;
        AdjustTokenPrivileges(hToken, FALSE, &tPrivs, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    
        // Warten
        Sleep(sec * 1000);
    
        // Shutdown erzwingen
        ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
    




  • Mr Evil schrieb:

    ShutDown 2

    Gabs das nicht mal bei Windows?



  • windows selber bietet auch eine shutdown exe - aber diese ist nicht so konfortabel
    die von mir bietet ja drei moeglichkeiten wann etwas geschehen soll
    zu einem bestimmten zeitpunkt, nach einen countdown prinzip, oder wenn die prozessorlast fuer N zeit unter N prozent bleibt
    zudem kann man halt runterfahren, oder neustarten, ausloggen, monitor aus, ruhezustand
    und beim minimieren verschwindets ins tray - mir waere kein windows tool bekannt das das alles auch so bietet {zudem in einer einfach zu bedienenden oberflaeche}


Anmelden zum Antworten