Ovo restartuje XP. Za Win9x mislim da je dovoljan samo red sa ExitWindowsEx.
Code:
program Reboot;
uses windows;
var
TokenHandle,ReturnLength: Cardinal;
NewState: TTokenPrivileges;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, TokenHandle) then
begin
try
NewState.PrivilegeCount := 1;
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', NewState.Privileges[0].Luid);
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TokenHandle, False, NewState, SizeOf(NewState), nil, ReturnLength);
finally
CloseHandle(TokenHandle);
end;
end;
{ Ostaviti samo jedan od sledecih redova }
//ExitWindowsEx(EWX_LOGOFF); //0
//ExitWindowsEx(EWX_SHUTDOWN); //1
ExitWindowsEx(EWX_REBOOT); //2
//ExitWindowsEx(EWX_FORCE); //4
//ExitWindowsEx(EWX_POWEROFF,0); //8
//ExitWindowsEx(EWX_FORCEIFHUNG); //16
//SetSystemPowerState(False,False); //Hibernate
end.