Delphi
Общие вопросы

Как перезагрузить или выключить компьютер с помощи функции ExitWindows?

Опубликовано: 28 июл 06
Рейтинг:

Автор: Ramin
Прислал: Ramin

function MyExitWindows(RebootParam: Longword): Boolean;  
var  
  TTokenHd: THandle;  
  TTokenPvg: TTokenPrivileges;  
  cbtpPrevious: DWORD;  
  rTTokenPvg: TTokenPrivileges;  
  pcbtpPreviousRequired: DWORD;  
  tpResult: Boolean;  
const  
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';  
begin  
  if Win32Platform = VER_PLATFORM_WIN32_NT then  
  begin  
    tpResult := OpenProcessToken(GetCurrentProcess(),  
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,  
      TTokenHd);  
    if tpResult then  
    begin  
      tpResult := LookupPrivilegeValue(nil,  
                                       SE_SHUTDOWN_NAME,  
                                       TTokenPvg.Privileges[0].Luid);  
      TTokenPvg.PrivilegeCount := 1;  
      TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;  
      cbtpPrevious := SizeOf(rTTokenPvg);  
      pcbtpPreviousRequired := 0;  
      if tpResult then  
        Windows.AdjustTokenPrivileges(TTokenHd,  
                                      False,  
                                      TTokenPvg,  
                                      cbtpPrevious, 
                                      rTTokenPvg, 
                                      pcbtpPreviousRequired); 
    end; 
  end; 
  Result := ExitWindowsEx(RebootParam, 0);
end; 

//Выключение
procedure TForm1.Button18Click(Sender: TObject);
begin
 MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

//Перезагрузка
procedure TForm1.Button19Click(Sender: TObject);
begin
  MyExitWindows(EWX_REBOOT or EWX_FORCE); 
end;

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Delphi / Общие вопросы / Как перезагрузить или выключить компьютер с помощи функции ExitWindows?