Показать сообщение отдельно

  #9  
Старый 06.05.2007, 23:04
Аватар для l-l00K
l-l00K
Leaders of Antichat - Level 4
Регистрация: 26.11.2006
Сообщений: 237
Провел на форуме:
13395217

Репутация: 2097
По умолчанию

Выключение:
Код:
var
  downQuick: Boolean = False;
  powerOff: Boolean = False;
  logoff: Boolean = False;
  reboot: Boolean = False;

...

procedure DoShutdown;
var
  rl, flgs: Cardinal;
  hToken: Cardinal;
  tkp: TOKEN_PRIVILEGES;
begin
  flgs := 0;
  if downQuick then flgs := flgs or EWX_FORCE;
  if not reboot then flgs := flgs or EWX_SHUTDOWN;
  if reboot then flgs := flgs or EWX_REBOOT;
  if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF;
  if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
      EWX_LOGOFF;
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
      hToken) then
      exit
    else
    begin
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
      begin
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        tkp.PrivilegeCount           := 1;
        AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
        if GetLastError <> ERROR_SUCCESS then
          Writeln('Error adjusting process privileges.');
      end
      else
        exit;
    end; 

  end;

  ExitWindowsEx(flgs, 0);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoShutdown;
end;
Вот еще варианты:

Код:
ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0);


останавливает работу системы в безопасный момент времени. Все буферы очищаются с сохранением данных на диске, все процессы останавливаются


Код:
ExitWindowsEx(EWX_REBOOT or ewx_force,0);


перезагрузка системы


Код:
ExitWindowsEx(EWX_FORCE or ewx_force,0);


завершает работу всех запущенных в системе приложений, не посылая им сообщения WM_QUERYENDSESSION и WM_ENDSESSIO. Это может вызвать потерю не сохраненных данных


Код:
ExitWindowsEx(EWX_POWEROFF or ewx_force,0);

завершает работу компьютера с выключением питания, если система поддерживает автоуправление питанием


Код:
ExitWindowsEx(EWX_FORCEIFHUNG or ewx_force,0);


завершает работу всех запущенных в системе приложений если система висит

Ещё вариант перезагрузки:


Код:
mov  al,0F0h  
out  64h,al

Последний раз редактировалось l-l00K; 06.05.2007 в 23:11..
 
Ответить с цитированием