(WinAPI) PC herunterfahren



  • Kann mir vielleicht jemand helfen ich habe ein Programm geschrieben das den PC um einer bestimmten Uhrzeit herunterfahren soll ich hab die Zeit sachen also den wecker dazu auch fertig und das funzt auch alles abe wie bekomme ich das hin das der PC sich dann auch alleine herunterfähr wäre nett wenn mir jemand einen Quellcode dazu geben könnte dake

    Florian



  • benutzt du echtes DOS oder die Windos Konsole?

    unter DOS konnte man das nämlich über irgend ein (BIOS?) Interrupt, ob das bei Windos noch geht weiss ich nicht.



  • hi, unter windows geht das mit

    ExitWindowsEx(EWX_POWEROFF,0)
    

    hab selbst ein programm geschrieben welches das von ihm angesprochen unter windows macht(es kann auch noch programme starten und diese beim beenden auch wieder schliessen)



  • Ich benutze die Konsole



  • Aber so wie firefly mir das Vorgeschlagen hat so funzt das nicht weil ich dann nachher die Meldung bekomme das sich Windows nicht schließen kann wenn eine Anwendung offen ist und dann muss ich erst ok drücken.Aber ich möchte ja das der PC sich dann gleich automatisch beendet



  • dann würdich mal unter der Hilde schaun 😛 also

    EWX_FORCE macht den PC definitiv tod, komme was da wolle, allerdings werden die Anwendungen abgewürgt weshalb ich erst
    ExitWindowsEx(EWX_POWEROFF,0) und dann ein paar sekunden später
    ExitWindowsEx(EWX_POWEROFF | EWX_FORCE,0) aufrufen würde, so haben die armen dinger wenigstens nochne Chance 😃

    Ach übrigens musst du bei NT/2000/xp noch das SE_SHUTDOWN_NAME Privileg setzen(force geht auch so aber dann meldet der sich nur neu an) sonst passiert da nix 😑



  • thnx ich habs herzlichsten dank an euch alle



  • Also ich habe das auch gerade gesehen und mich interresiert der Punkt auch ziemlich aber bei mir gehts nicht es werden nur alle anwendungen geschlossen aber der PC fährt nicht herunter könnte mir da vielleicht jemand helfen ich habe Windows 98 danke



  • kann es sein das dein pc kein automatisches Ausknipsen unterstützt?



  • Doch das ünterstützt er.Aber wenn ich das ja so mache dann schließt der mir wie gesagt die anwendungen und das wars danach kann ich auch normal weiter arbeiten dann hab ich da meinen Desktop und muss halt alles neu machen



  • Probiers mal hiermit

    void SetShutdownPrivileges(void) 
    { 
    HANDLE token; 
    TOKEN_PRIVILEGES tokenpriv; 
    
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token); 
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tokenpriv.Privileges[0].Luid); 
       tokenpriv.PrivilegeCount=1; 
    tokenpriv.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; 
    AdjustTokenPrivileges(token, false, &tokenpriv, 0, (PTOKEN_PRIVILEGES)NULL, 0); 
    }
    


  • Das geht auch nicht kann mir vielleicht jemand einen Funktionierenden quellcode geben?



  • Versuch mal das von BYtes&More ( http://rad.bytesandmore.de ), da ist ne Betriebssystemerkennung drin und das mit Privileg holen is da auch schon feine drin

    bool ShutdownWindows(UINT ilFlag)
    {
      bool blRetVal = true;                 // Rückgabewert
      TOKEN_PRIVILEGES stTokenPriviledges;
      HANDLE hProcToken;                    // Prozess Token
    
      // auf NT-Platform prüfen
            OSVERSIONINFO stVerInfo;
      stVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
      GetVersionEx(&stVerInfo);
    
      // falls NT/2000:
      if(stVerInfo.dwPlatformId==VER_PLATFORM_WIN32_NT)
      {
        // Prozess Token besorgen
        blRetVal = OpenProcessToken(GetCurrentProcess(),
          TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hProcToken);
    
        if(blRetVal)
        {
          // LUID für Shutdown Privilege besorgen
          blRetVal = LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
            &stTokenPriviledges.Privileges[0].Luid);
          stTokenPriviledges.PrivilegeCount=1;
          stTokenPriviledges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
        }
    
        if(blRetVal)
        {
          // Shutdown privilege aktuellem Prozess geben
          blRetVal = AdjustTokenPrivileges(hProcToken, false, &stTokenPriviledges,
            0, (PTOKEN_PRIVILEGES)NULL, 0);
        }
      }
      // Windows beenden:
      if(blRetVal)
        blRetVal = ExitWindowsEx(ilFlag, NULL);
    
      return blRetVal;
    }
    


  • Ob man nun in der Konsole ist oder nicht ist beim Herunterfahren des PCs vollkommen egal.

    Deswegen verschieb ich den Thread zu den Profis der WinAPI :).

    MfG SideWinder


Anmelden zum Antworten