Rechner Ausschalten



  • Ich habe mir ein kleines Prog. gebastelt um mein Rechner zu einer bestimmten Zeit Auszuschalten. Mein Problem besteht darin das es unter Win 2000 prima läuft aber XP weigert sich. Kann mir jemand Helfen?

    #include<iostream>
    #include <conio.h>
    #include <time.h> 
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    	int m_Min;
    	int m_Std;
    	int m_Aus =0;
    
        cout <<"Bitte Endzeit eingeben"<<endl;
        cout<<"Stunde : ";
        cin >>m_Std;    
        cout <<"Minuten : ";
        cin >>m_Min;
        cout <<"Endzeit = "<<m_Std<<":"<<m_Min<<endl;
    
    	for (;;)
        {    
    		time_t CurrentTime; 
    		time(&CurrentTime);   //GMT in Sekunden
    		struct tm TimeStruct = *(localtime(&CurrentTime));  //Zeit in einzelne Komponenten 
    		int Hours = TimeStruct.tm_hour;
    		int Minutes = TimeStruct.tm_min;		
    		if ((m_Min == Minutes) & (m_Std == Hours))
    		/*{
    			cout <<"AUS!!!"<<endl; // nur Zum Testen !!!
    			break;
    		}*/
    		{
    			ExitWindowsEx(EWX_POWEROFF, 0); 
    			break;
    		}
    	}
    	return 0;
    }
    


  • Das ist ein WinAPI-Problem.



  • code_pilot schrieb:

    Das ist ein WinAPI-Problem.

    du bist aber ein blitzmerker :p



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



  • // ilFlag:
    // EWX_LOGOFF      Schließt alle Anwendungen und loggt den Benutzer aus
    // EWX_POWEROFF    Schaltet den Rechner aus (sofern von der Hardware unterstützt)
    // EWX_REBOOT      Bootet den Rechner neu
    // EWX_SHUTDOWN    Fährt Windows herunter, ohne neu zu booten
    
    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;
    }
    

Anmelden zum Antworten