Mep Sites - Dicas

Mep Sites: Dicas de Delphi - Desligar/Reiniciar/Fazer logoff no computador

Utilize a seguinte função:

procedure DesligaWindows(acao: Cardinal);
var
TokenPriv: TTokenPrivileges;
H: DWORD;
HToken: THandle;
begin

{* para WIN 2000, XP e NT *}
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, HToken);
LookUpPrivilegeValue(nil, 'SeShutdownPrivilege',
TokenPriv.Privileges[0].Luid);
TokenPriv.PrivilegeCount := 1;
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
H := 0;
AdjustTokenPrivileges(HToken, False, TokenPriv, 0,PTokenPrivileges(nil)^, H);
CloseHandle(HToken);
end;
ExitWindowsEx(acao, 0);
end;

Chame-a assim, como nestes exemplos:

DesligaWindows(EWX_SHUTDOWN); // desligar normal
DesligaWindows(EWX_FORCE); //sair forçado
DesligaWindows(EWX_POWEROFF); //para fontes ATX
DesligaWindwos(EWX_LOGOFF); //efetua logoff
DesligaWindows(EWX_REBOOT); //reinicializa o computador