Eteindre ou redémarrer l'ordinateur

Contenu du snippet

type
  TSystemShutdownType = (sstCloseSession, sstPowerOff, sstReboot, sstShutdown);
function SystemShutdown(const ShutdownType: TSystemShutdownType= sstPowerOff): Boolean;
var
 TokHandle : THandle;
 TokPrivilege: TTokenPrivileges;
 ReturnLength, SizeOfTokPrivilege : Cardinal;
begin
  Result := OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, TokHandle);
  if not result then
    exit;
  try
    SizeOfTokPrivilege := SizeOf(TokPrivilege);
    FillChar(TokPrivilege, SizeOfTokPrivilege, 0);
    ReturnLength := 0;
    TokPrivilege.PrivilegeCount := 1;
    LookupPrivilegeValue(nil, 'SeShutdownPrivilege', TokPrivilege.Privileges[0].Luid);
    TokPrivilege.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(TokHandle, False, TokPrivilege, SizeOfTokPrivilege, nil, ReturnLength);
    if GetLastError <> ERROR_SUCCESS then
      exit;
    case ShutDownType of
      sstCloseSession : result := ExitWindowsEx(EWX_LOGOFF, 0);
      sstPowerOff     : result := ExitWindowsEx(EWX_POWEROFF, 0);
      sstReboot       : result := ExitWindowsEx(EWX_REBOOT, 0);
      sstShutdown     : result := ExitWindowsEx(EWX_SHUTDOWN, 0);
    end;
  finally
   CloseHandle(TokHandle);
  end;
end;

Compatibilité : Delphi 5

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.