AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi windows herunterfahren zusammengefaßt
Thema durchsuchen
Ansicht
Themen-Optionen

windows herunterfahren zusammengefaßt

Ein Thema von Marco Steinebach · begonnen am 27. Jan 2008 · letzter Beitrag vom 14. Feb 2008
 
Marco Steinebach

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

windows herunterfahren zusammengefaßt

  Alt 27. Jan 2008, 10: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz