Home » Tipps & Tricks » System » Systemfunktionen » Windows herunterfahren

Windows herunterfahren

Folgender Code kann sowohl Windows 95 / 98 / Me als auch NT / 2000 / XP herunterfahren.Bei der zweitgenannten Gruppe müssen zuerst die für einen Shutdown notwendigen Privilegien gesetzt werden.

function ExWindows(const AFlag: Word): Boolean;
var
  vi     : TOSVersionInfo;
  hToken : THandle;
  tp     : TTokenPrivileges;
  h      : DWord;
begin
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;

Mögliche Werte für den Parameter Flag:

  • EWX_Logoff – Loggt den User aus
  • EWX_Poweroff – Unterstützt der Rechner, dieses Feature, wird der Computer nach dem Herunterfahren ausgeschaltet.
  • EWX_Reboot – Computer wird neu gestartet
  • EWX_Shutdown – Der Computer wird normal herruntergefahren

Die o.g. Parameter lassen sich zusätzlich über OR mit EWX_FORCE oder ab Windows2000/XP mit EWX_FORCEIFHUNG verknüpfen. EWX_FORCE fährt den Computer direkt herrunter. Dies kann u.U. zu Datenverlusten führen. EWX_FORCEIFHUNG gibt anderen Programmen zwar die Chance sich zu schließen, fährt den Rechner allerdings trotzdem herrunter, wenn sie sich aufgehängt haben.
Für weitere Informationen lesen Sie bitte in der PSDk unter dem Stichwort „ExitWindowsEx“.