Einzelnen Beitrag anzeigen

Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#1

windows herunterfahren zusammengefaßt

  Alt 27. Jan 2008, 11:32
Hallo Leute,
ich hab jetzt 'ne ganze Weile im Forum und Internet gewühlt, und mal alles zusammengetragen, was es so zum Windows Herunterfahren so gab.
Hier ist das Endresultat - aber ich hab noch eine Frage dazu:
Delphi-Quellcode:
// ein typ, der die parameter, die MyExitWindows übergeben werden können festlegt

  TExit = (EW_Garnicht, EW_Neustart, EW_Abmelden, EW_Herunterfahren, EW_Ruhezustand, EW_Standby);
// ;-) der EW_Garnicht kann auch weggelassen werden...

// unter Win NT/2000/xp/vista braucht man priviligien zum herunterfahren...
// die hab ich, zum besseren verständnis, ausgelagert.
procedure GetShutdownPrivileges;
var
  vi: TOSVersionInfo;
  hToken: THandle;
  tp: TTokenPrivileges;
  h: DWord;
begin
  vi.dwOSVersionInfoSize:=SizeOf(vi);
  GetVersionEx (vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
  begin
    OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
    // der Forums-Code von DoctorD hier um TOKEN_QUERY ergänzt...
    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);
  end;
end;

procedure MyExitWindows (E: TExit);
begin
  if e = EW_Garnicht then exit;
  GetShutdownPrivileges;
  if E = EW_herunterfahren then
    ExitWindowsEx(EWX_ShutDown or EWX_FORCEIFHUNG, 0);
  if E = EW_Ruhezustand then
    SetSystemPowerState(false, true);
  if E = EW_Standby then
    SetSystemPowerState(true, true);
  if E = EW_Abmelden then
    ExitWindowsEx(EWX_LOGOFF, 0);
  if E = EW_Neustart then
    ExitWindowsEx(EWX_REBOOT,0);
end;
so weit, so gut.
eine Frage: wozu benötigt man EWX_POWEROFF - mir ist der Unterschied zu EWX_SHUTDOWN beim besten willen nicht klar.

Hat jemand verbesserungsvorschläge, damit das Ding allgemeinültig und funktionell vielleicht noch besser wird?

Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat