Entwickler-Ecke

Windows API - ShutDown unter winXP


-=[noname]=- - Mi 04.12.02 19:09
Titel: ShutDown unter winXP
mit der folgenden funktion soll es möglich sein den Computer herrunter zu fahren aber irgendwie! Naja jedenalls nich unter XP!

ExitWindowsEx(EWX_SHUTDOWN,0);

Hat einer ne andere Variante oder ne Idee was man machen kann? oder liegts eventuell an meiner Delphi Version?? ich hab nur 3.0!

Danke schonmal


Delete - Mi 04.12.02 19:23

Zitat:
oder liegts eventuell an meiner Delphi Version?? ich hab nur 3.0!

Ja, es liegt eindeutig an deiner Delphi-Version ... :roll: ... Mal im Ernst, hat einer gezählt, wie oft diese Frage nun schon beantwortet werden musste?

Lieber -=[noname]=-, es gibt eine fantastische Suchfunktion. Und ich garantiere dir guten Gewissens, dass du die Lösung für dein Problem findest. Es liegt nämlich nicht an deiner Delphi-Version.

Und der Code ist grundlegend auch richtig. Man muss eben nur noch bedenken, dass XP ein OS auf NT-Basis ist. Da darf nicht jeder alles.

So, das sind genug Infos zum Suchen [http://www.auq.de/search.php].


Ghost - Mo 16.12.02 17:40

Hi,

das liegt an XP. Bei mir funktionietr das auch nicht mehr.
Kannst es aber mit:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function ExWindows(const AQuestion: string; 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
  begin
    // Windows NT
    // 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
  begin // Windows 95
    Result := ExitWindowsEx(flag,0);
  end;
end;


Quelltext
1:
ExWindows('Beenden', ewx_poweroff);                    

probieren. Das klappt bei mir.


Delete - Mo 16.12.02 18:14

Sag mal Jungs was spielt ihr eigentlich für ein Spiel mit mit? "Such den übegeben Parameter" oder was? :shock:

Quelltext
1:
function ExWindows(const AQuestion: string; flag: word): Boolean;                    

Ich kann in der Funktion den übergebenen Parameter AQuestion nirgens wieder finden. Das ist jetzt schon der zweite Code den ich heute sehe, wo das der Fall ist. :roll:

Da drämgt sich mir echt die Frage auf, ob ihr euch eigentlich den Code mal ankuckt, den ihr per copy and paste in euren Programmen benutzt. :o


Ghost - Mo 16.12.02 20:15

Das ist eine vorgesehen Variable für eine Frage zum Beenden.


Delete - Mo 16.12.02 21:04

Und wo ist die Frage bitte sehr? :shock:


Delete - Mo 16.12.02 21:16

@Ghost: Luckie meinte den String "Beenden" in der Zeile

Quelltext
1:
ExWindows('Beenden', ewx_poweroff);                    

Diese Variable

Quelltext
1:
const AQuestion: string;                    

wird nicht in der Funktion benutzt. Du könntest sie ebenso gut weglassen. Dieses Beispiel stammt meines Wissens nach aus dem alten EDH. Ich denke mal, der Tippeinsender wird sicher eine Frage benutzt haben, etwa
Zitat:
Wollen Sie wirklich beenden?

o.ä., aber weil er einen universellen Tipp abgeben wollte, hat er das rausgenommen und dabei die Variable im Funktionskopf vergessen.

Außerdem ist deine Aussage
Ghost hat folgendes geschrieben:
das liegt an XP. Bei mir funktionietr das auch nicht mehr.

falsch! Es liegt nicht an XP, sondern an mangelnden Rechten. Es funktioniert tadellos - wenn man sich eben die benötigten Rechte holt. Und genau das macht dein Codebeispiel ja auch. Also, bitte nicht auf´s Betriebssystem schieben!

Und zu guter Letzt, deine Aussage:
Zitat:
Das ist eine vorgesehen Variable für eine Frage zum Beenden.

Du beziehst dich dabei auf EWX_POWEROFF.
PSDK hat folgendes geschrieben:
EWX_POWEROFF: Shuts down the system and turns off the power. The system must support the power-off feature.

Vorzuziehen ist IMO, wie -=noname=- auch verwendete:
PSDK hat folgendes geschrieben:
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. If the system supports the power-off feature, the power is also turned off.