Einzelnen Beitrag anzeigen

ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: windows herunterfahren zusammengefaßt

  Alt 27. Jan 2008, 12:39
Vielleicht solltest du die ganzen IF-Abfragen durch eine CASE-Anweisung ersetzen. Dürfte übersichtlicher sein. Anbei mal die Funktion wie ich sie mir angepasst habe:
Delphi-Quellcode:
const
  EWX_STANDBY = $20; // eigene Konstante für Standbymodus
  EWX_LOCKWKS = $40; // eigene Konstante für das Sperren der Arbeitsstation

// Funktion um Windows herunterzufahren
// Die zu übergebenen Werte können "EWX_LOGOFF", "EWX_REBOOT",
// "EWX_SHUTDOWN", "EWX_STANDBY" oder "EWX_LOCKWKS" lauten.
function ExitWin(Flag : Word) : Boolean;
var
  vi : TOSVersionInfo;
  hToken : THandle;
  tp : TTokenPrivileges;
  h : DWord;
begin
  vi.dwOSVersionInfoSize := SizeOf(vi);
  GetVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT/2K/XP
    begin
      OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
      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);
      case flag of
        // Abmelden, Neu starten, Herunterfahren
        EWX_LOGOFF,
        EWX_REBOOT,
        EWX_SHUTDOWN : Result := ExitWindowsEx(flag,0);
        // Standbymodus
        EWX_STANDBY : Result := SetSystemPowerState(True, True);
        // Arbeitsstation sperren
        EWX_LOCKWKS : Result := LockWorkstation;
      else
        // Wenn kein Parameter übergeben wurde ist Rückgabewert = FALSE
        Result := False;
      end;
    end
  else // Windows 9x/ME
    begin
      Result := ExitWindowsEx(flag,0);
    end;
end;
  Mit Zitat antworten Zitat