Code uses Windows, messages; ... procedure RebootSystem(Flags: UINT); var handle_: THandle; n: DWORD; luid: TLargeInteger; priv: TOKEN_PRIVILEGES; ver: TOSVERSIONINFO; begin ver.dwOSVersionInfoSize := Sizeof(ver); GetVersionEx(ver); if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then begin if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin priv.PrivilegeCount := 1; priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; priv.Privileges[0].Luid := luid; AdjustTokenPrivileges(handle_, false, priv, 0, nil, n); end end; if not ExitWindowsEx(Flags,1) then writeln('Ошибка'); end; пример использования: Code RebootSystem(EWX_REBOOT); // для перезагрузки RebootSystem(EWX_POWEROFF); // для выключения
|