Как программно выключить компьютер?

Готовая функция:
bool shoot(bool reboot, bool force)
{
OSVERSIONINFO ver;
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&ver);
if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) // в семействе NT для выключения необходимо иметь привилегию SE_SHUTDOWN_NAME
       
{
       
HANDLE hToken;
       
TOKEN_PRIVILEGES* NewState;
       
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
       
NewState=(TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
       
NewState->PrivilegeCount = 1;
       
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&NewState->Privileges[0].Luid);
       
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
       
AdjustTokenPrivileges(hToken, FALSE, NewState, NULL, NULL,NULL);
       
free(NewState);
       
CloseHandle(hToken);
       }

UINT mode = 0;
if (reboot)
       
mode += EWX_REBOOT;
else
       
mode += EWX_POWEROFF;

if (force) mode += EWX_FORCE;

return ExitWindowsEx(mode ,0);
}
Использование:
shoot(false, true); // в "быстром" режиме закроет все программы и выключит компьютер
 
« Предыдущая статья   Следующая статья »