C++ Befehl den Computer auszuschalten



  • Gibt es einen Befehl in C++ der den Computer ausschaltet?

    Danke im Voraus!



  • du musst nen Befehl nehmen , der die Anwendung "shutdown" aufruft



  • Ich hab keine ahnung wie du das meinst. Ich lerne c++ noch nicht lange.



  • @imson _muss_ ? -> nein, es geht auch so:

    // Runterfahren des Rechners
    //
    #include <iostream>
    #include <windows.h>
    #include "shutdown_rechte.h"
    using std::cout;
    using std::endl;
    using std::cin;
    
    int main(int argc, char * argv[])
    {
    	for(unsigned int index=0;index<(unsigned)argc;index++)
    	if(argv[index][0] == '-')
    	{
    		switch (argv[index][1])
    		{
    		case 's':
    			SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE );
    			ExitWindowsEx(8,0);	// Runterfahren
    			exit(0);
    			break;
    		case 'r':
    			SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE );
    			ExitWindowsEx(2,0);	// Neustart
    			exit(0);
    			break;
    		}
    	}
    	// Setzen der Berechtigungen zum Neustart / Herunterfahren des Systems
    	// die Funktion wird in der 'shutdown_rechte.h' abgearbeitet
    	SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE );
    
    	// Menü zur Auswahl der Art des Herunterfahrens
    	char auswahl;
    	do{
    		cout << "Runterfahren des Systems, bitte machen Sie Ihre Angaben " << endl;
    		cout << "--------------------------------------------------------" << endl;
    		cout << "Auswahl: " <<  endl;
    		cout << "1 Abmelden" << endl;								// 0x00000000
    		cout << "2 Runterfahren (nicht Ausschalten)" << endl;		// 0x00000001
    		cout << "3 Neustart" << endl;								// 0x00000002
    		cout << "4 Schneller Neustart" << endl;						// 0x00000004
    		cout << "5 Runterfahren und Ausschalten" << endl;			// 0x00000008
    		cout << "6 Maustasten vertauschen" << endl;
    		cout << "7 Maustasten wiederherstellen" << endl;
    		cout << "9 Hilfe" << endl;
    		cout << "0 Abbrechen" << endl;
    		cout << "----------------------------------" << endl;
    		cout << "Treffen Sie Ihre Auswahl: ";
    		cin >> auswahl;
    		switch(auswahl)
    		{
    			case '1':
    				ExitWindowsEx(0,0);	// Abmelden
    				break;
    			case '2':
    				ExitWindowsEx(1,0);	// Runterfahren und nicht ausschalten
    				break;
    			case '3':
    				ExitWindowsEx(2,0);	// Neustart
    				break;
    			case '4':
    				ExitWindowsEx(4,0);	// Schneller Neustart
    				break;
    			case '5':
    				ExitWindowsEx(8,0);	// Ausschalten
    				break;
    			case '6':
    				SwapMouseButton(1);
    				break;
    			case '7':
    				SwapMouseButton(0);
    				break;
    			case '9':
    				cout << "\nshutdown.exe -s Herunterfahren" << endl;
    				cout << "shutdown.exe -r Neustart\n" << endl;
    				break;
    			case '0':
    				exit(0);
    				break;
    			default:
    				cout << "\nFalsche Eingabe, noch einmal..." << endl;
    				break;
    		}
    	}while(auswahl != 1 || auswahl != 2 || auswahl != 3 || auswahl != 4 || auswahl != 5 || auswahl != 6 || auswahl != 7 || auswahl != 9 || auswahl != 0);
    	/*	
    	// Nur Runterfahren des Systems
    	int timeout = 0, force = 1, reboot = 1;	//Sekunden,Schnelles Booten,Neustart
    	{
    		InitiateSystemShutdown( NULL,NULL, (DWORD) timeout, force, reboot );
    	}
    	*/
    return 0;
    }
    

    und die header-datei:

    // Rechtevergabe zum Herunterfahren des Systems
    // BOOL SetCurrentPrivilege( LPCTSTR Privilege, BOOL bEnablePrivilege );
    //
    BOOL SetCurrentPrivilege( LPCTSTR Privilege, BOOL bEnablePrivilege )
    {
    	HANDLE hToken;
    	LUID luid;
    	TOKEN_PRIVILEGES tp, tpPrevious;
    	DWORD cbPrevious = sizeof( TOKEN_PRIVILEGES );
    	BOOL bSuccess = FALSE;
    
    	if ( ! LookupPrivilegeValue( NULL, Privilege, &luid ) )
    		return FALSE;
    
    	if( ! OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken ) )
    		return FALSE;
    
    	tp.PrivilegeCount = 1;
    	tp.Privileges[0].Luid = luid;
    	tp.Privileges[0].Attributes = 0;
    
    	AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof( TOKEN_PRIVILEGES ), &tpPrevious, &cbPrevious );
    
    	if ( GetLastError() == ERROR_SUCCESS )
    		{
    			tpPrevious.PrivilegeCount = 1;
    			tpPrevious.Privileges[0].Luid = luid;
    
    			if ( bEnablePrivilege )
    				tpPrevious.Privileges[0].Attributes |= ( SE_PRIVILEGE_ENABLED );
    			else
    				tpPrevious.Privileges[0].Attributes &= ~( SE_PRIVILEGE_ENABLED );
    
    			AdjustTokenPrivileges( hToken, FALSE, &tpPrevious, cbPrevious, NULL, NULL );
    
    			if ( GetLastError() == ERROR_SUCCESS )
    				bSuccess=TRUE;
    	}
    	CloseHandle( hToken );
    	return bSuccess;
    }
    


  • OK, danke!



  • Nur für die, die es nicht sowieso schon wissen: Das ist WinAPI und hat mit C++ soviel am Hut wie Sharon mit den Sternsingern. Also, beim nächsten mal in ein passenderes Forum posten 😉 .



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


Anmelden zum Antworten