Delphi Russian Knowledge Base - это лучше всего, но можно и сейчас написать кое-что... Есть несколько решений: 1)
| Код | ExitWindows(EW_REBOOTSYSTEM, 0); // или ExitWindows(EW_RESTARTWINDOWS, 0);
|
2)
| Код | procedure RebootSystem; var handle, ph:THandle; pid: DWord; luid:TlargeInteger; dummy, priv: TOKEN_PRIVILEGES; ver: TOSVERIONINFO; begin ver.dwOSVersionInfoSize:=Sizeof(ver; GetVersionEx(ver); if ver.dwPlatformId = VER_PlATFORM_WIN32_NT then begin pid:=GetCurrentProcessId; ph:=OpenProcess(PROCESSALL_ACCESS, false, pid); if OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) and 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, dummy, pid); end; end; ExitWndowsEX(EWX_REBOOT, 0); end;
|
3)
| Код | procedure Shutdown(name:string; // имя машины (\\SERVER) Message:string; // сообщение Dalay:integer; // задержка перед рестартом restart, CloseAll:boolean); var ph:THandle; tp, prevst: TTokenPrivileges; rl:DWord; begin OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ph); LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].luid); tp.PrivilegeCount:=1; tp.Privileges[0].Attributes:=2; AdjustTokenPrivileges(ph, false, tp, SizeOf(prevst), prevst, rl); InitiateSystemShutdown(PChar(name), PChar(Message), Delay, Restart, CloseAll); end;
|
4)
| Код | Win32Check(ExitWindows(0, 0)); // Eixt System; Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); // Restart Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0)); // Exit Win32Check(ExitWindowsEx(EWX_LOGOFF, 0)); // Change user
|
|