Windows reboot/de

From Lazarus wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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);
  ...