Windows reboot/de

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de)

Zurück zur Seite Code Beispiele.

Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.
Die Prozedur beendet bzw. rebootet Windows.

{
Bedeutung der Windowskonstanten:
EWX_LOGOFF
  Alle Prozesse des Benutzers werden beendet.
  Der Benutzer wird abgemeldet.

EWX_POWEROFF
  Fährt Windows herunter und setzt den Computer in den StandBy-Modus.
  (Die Hardware muss dies unterstützen)

EWX_REBOOT
  Fährt Windows herunter und startet es neu

EWX_SHUTDOWN
  Fährt Windows herunter

EWX_FORCE
  Beendet die Prozesse ohne Rückfrage

EWX_FORCEIFHUNG
  Beendet Prozesse mit vorheriger Nachfrage
}

  ...

uses
  SysUtils, Windows, Dialogs, ...;
  
  ...

const
  //Soft-Variante
  Logoff = EWX_LOGOFF or EWX_FORCEIFHUNG;
  StandBy = EWX_POWEROFF or EWX_FORCEIFHUNG;
  Reboot = EWX_REBOOT or EWX_FORCEIFHUNG;
  Shutdown = EWX_SHUTDOWN or EWX_FORCEIFHUNG;

  //Harte-Variante
  Logoff_F = EWX_LOGOFF or EWX_FORCE;
  StandBy_F = EWX_POWEROFF or EWX_FORCE;
  Reboot_F = EWX_REBOOT or EWX_FORCE;
  Shutdown_F = EWX_SHUTDOWN or EWX_FORCE;
  
  ...
  
implementation
  
  ...
  
function funExitWindows(lwdRebootParam: longword): boolean;
var
  hToken: THandle;
  TokenPvg1: TTokenPrivileges;
  TokenPvg2: TTokenPrivileges;
  wrdGroesseTokenPvg2: DWORD;
  wrdPcbtpPreviousRequired: DWORD = 0;
  blnRueckgabe: boolean;

begin
  
  Result := False;
  
  try
  
    blnRueckgabe := OpenProcessToken(GetCurrentProcess(),
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
  
    if blnRueckgabe = True then
    begin
      blnRueckgabe := LookupPrivilegeValue(nil, 'SeShutdownPrivilege',
        TokenPvg1.Privileges[0].Luid);
  
      TokenPvg1.PrivilegeCount := 1;
      TokenPvg1.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      wrdGroesseTokenPvg2 := SizeOf(TokenPvg2);
  
      if blnRueckgabe = True then
        Windows.AdjustTokenPrivileges(hToken, False, TokenPvg1,
          wrdGroesseTokenPvg2, TokenPvg2, wrdPcbtpPreviousRequired);
  
    end;
  
    Result := ExitWindowsEx(RebootParam, 0);
  
  except
    ShowMessage('Beim Herunterfahren von Windows ist ein Fehler aufgetreten');
  end;

end;
  
  ...


Beispiel für einen Aufruf der Prozedur:

  ...
subExitWindows(Shutdown);
  ...