Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows komplett herunterfahren (https://www.delphipraxis.net/7225-windows-komplett-herunterfahren.html)

Uncle Cracker 6. Aug 2003 10:11


Windows komplett herunterfahren
 
Wie kann man Windows komplett runterfahren und dann den Rechner ausschalten?

Wenn ich die Befehle aus der Code-Library nehme, steht am Ende immer 'Sie können den Copmuter jetzt ausschalten.

Aber ich würde den Rechner gern komplett ausschalten, als ob ich das über das Startmenü gemacht habe.

Kann mir vielleicht jemand bei dem Problem helfen?


:love: Danke UC

Chewie 6. Aug 2003 10:23

Re: Windows komplett herunterfahren
 
Heißt das, wenn du den Rechner übers Startmenü runterfährst, schaltet er sich ab, oder was? Das wäre sehr interessant, denn ob er der Rechner sich abschalten kann oder nicht liegt am Netzteil.

Uncle Cracker 6. Aug 2003 10:26

Re: Windows komplett herunterfahren
 
Wenn ich mich über das Startmenü abmelde fährt der Rechner komplett runter und schaltet sich auch ab, aber wenn ich das über den Code mach nicht.

Hab's auch schon mit 'shutdown -s -f -t 00', ist aber genau das selbe Problem.

Also muss sich Windows anders beenden, oder?


:love: Danke UC

MikeS 6. Aug 2003 11:41

Re: Windows komplett herunterfahren
 
Versuchs doch mal mit POWEROFF

Ich hab aber die Erfahrung gemacht das sich das von Windows Version zu Version unterschiedlich verhält!

bei 2000 schaltet shutdown mit aus und bei 98 nicht, oder irgendwie so!!

Luckie 6. Aug 2003 12:45

Re: Windows komplett herunterfahren
 
Um was für ein Windows handelt es sich?

Uncle Cracker 6. Aug 2003 15:37

Re: Windows komplett herunterfahren
 
Zitat:

Zitat von Luckie
Um was für ein Windows handelt es sich?

Um Windows XP, denn bei 98 lässt sich der Rechner per Code abschalten (98 ist auf dem selben Rechner wie XP).

Shutdown funktioniert auf 98 aber eben auf XP nicht :evil:

Luckie 6. Aug 2003 16:50

Re: Windows komplett herunterfahren
 
Holst du dir auch vorher die entsprechenden Rechte unter XP?

Assarbad 6. Aug 2003 19:50

Re: Windows komplett herunterfahren
 
ExitWindowsEx mit dem Flag EWX_POWEROFF und entsprechenden Privilegien benutzen.

Allerdings habe ich selbst einen Rechner, bei dem es den entsprechenden Treiber für 9x gab (wo also Poweroff funktionierte) nur auf 2000 funktioniert es nicht. Testen kannst du es damit, ob XP selbst das "Ausschalten" bringt. Wenn das nicht geht, besorg dir erstmal nen Treiber oder vergiß es (ich zB habe keinen Treiber gefunden zu meinem ASUS P5A)

Uncle Cracker 7. Aug 2003 08:43

Re: Windows komplett herunterfahren
 
:love: Danke Assarbad

mit Poweroff hat's funktioniert. Der Code aus der Code-Library sieht bei mir jetzt so aus:

Delphi-Quellcode:
function ExitWin(flag:word): Boolean;
var vi     : TOSVersionInfo;
    hToken : THandle;
    tp     : TTokenPrivileges;
    h      : DWord;

begin
  //result := false;
  vi.dwOSVersionInfoSize:=SizeOf(vi);
  GetVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT
  begin
    // Achtung bei Delphi 2 muß @hToken stehen ... !!!! ????? 
    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);
    result := ExitWindowsEx(flag,0);
  end
  else // Windows 95 
  begin
    Result := ExitWindowsEx(flag,0);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   ExitWindowsEx(EWX_POWEROFF, 0);   
end;
So fährt der Rechner nämlich bei mir komplett runter und nicht mit ExitWindowsEx(EWX_SHUTDOWN, 0);

Luckie 7. Aug 2003 11:28

Re: Windows komplett herunterfahren
 
Einblick ins MSDN oder PSDK hätte uns diesen Thread übrigens erspart:
EWX_SHUTDOWN:
Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped.

EWX_POWEROFF:
Shuts down the system and turns off the power. The system must support the power-off feature.

:roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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