Evo koda sa kojim osim shutdown mozes uraditi i restart, hibernate i logoff na win NT/2000/XP. Za Win9x ti ne treba onaj pocetni deo oko podesavanja privilegija vec samo ExitWindowsEx.
Code:
program off;
uses
windows;
var
TokenHandle,ReturnLength: Cardinal;
NewState: TTokenPrivileges;
begin
//'SeShutdownPrivilege' {SE_SHUTDOWN_NAME});
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 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.