Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как выключить компютер?


Автор: chipset 7.4.2005, 21:56
 Используется API-функция 
 bool ExitWindowsEx (UINT uFlags, DWORD dwReason) Declared in Winuser.h; include Windows.h. Use User32.lib.

 uFlag:
 для перегрузки используем EWX_REBOOT для выключения питания EWX_POWEROFF если нужно экстренно выключит/перегрузить комп используем вышеуказаные влаги в сочетании с EWX_FORCE Второй параметр используется только в XP для указания причины перезагрузки. В NT/2000/XP для использования ExitWindowsEx необходимо иметь привелегию 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);




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)