Как выключить или перезагрузить компьютер
Как выключить или перезагрузить компьютер
Как выключить или перезагрузить компьютер procedure Shutdown(Flags: DWORD); var hToken: THandle; Luid: Int64; NewPrivileges: TTokenPrivileges; OldPrivileges: TTokenPrivileges; OldPrivilegesSize: DWORD; begin if Win32Platform = VER_PLATFORM_WIN32_NT then // получения привилегий для платформы NT begin // получения локального уникального ИД Win32Check(LookupPrivilegeValue(nil, 'SeShutdownPrivilege', Luid) // получения токена процесса Win32Check(OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); NewPrivileges.PrivilegeCount := 1; NewPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; NewPrivileges.Privileges[0].Luid := Luid; // настройка привилегий AdjustTokenPrivileges(hToken, False, NewPrivileges, SizeOf(OldPrivileges), OldPrivileges, OldPrivilegesSize); try Win32Check(GetLastError = ERROR_SUCCESS); finally CloseHandle(hToken); end end; Win32Check(ExitWindowsEx(Flags, 0)); end; Вызов: Shutdown(EWX_SHUTDOWN or EWX_POWEROFF); Флаги можно комбинировать c помощью оператора OR EWX_FORCE - принудительное выполнение операций, без сохранения данных.4 EWX_LOGOFF - выход из сеанса текущего пользователя; EWX_POWEROFF - выключение питания; EWX_REBOOT - пеpезагpузка Windows; EWX_SHUTDOWN - выключение Windows, точка в которой безопасно выключать питание. === Также можно использовать функцию InitiateSystemShutdown. С помощью данной функции можно выключать/перезагружать и удаленные компьютеры в локальной сети. Но в этом случае необходимо дополнительно иметь привилегию SeRemoteShutdownPrivilege.