![]() |
Problem mit Herunterfahren (schon viel probiert)
Hi alle,
ich habe versucht einen countdowner zur programmieren, funktioniert soweiter nur bei 0 sollte er herunterfahren. Tut er nicht weder mit
Delphi-Quellcode:
noch shellexecute.
ExitWindowsEx(EWX_SHUTDOWN, 0);
Benutze Delphi 6 Pro, bin Admin und habe sonst nix was dagegen sprechen würde. Das einziege was passiert er springt in die If-Abfrage aber scheints nicht ernst oder nicht war zunehmen. Habe auch probiert ob er nicht rein geht- Fehlanzeige. Hoffe ich könnt mir helfen. Schonmal danke im Vorraus |
Re: Problem mit Herunterfahren (schon viel probiert)
|
Re: Problem mit Herunterfahren (schon viel probiert)
Dui musst erst das Privileg zum Runterfahren des Rechners aktivieren. Das sollte aber in jedem Code, der demonstriert, wie man einen NT ff. Rechner runterfährt, gezeigt werden.
|
Re: Problem mit Herunterfahren (schon viel probiert)
Den Link kenne ich... nur hat es mir nie viel gesagt wie das mit den Privilegien funktioniert(bin leider erst 1. Jahr in Delphi). Kann mir dann einer sagen wie und wo ich diese positionier kann/soll?
|
Re: Problem mit Herunterfahren (schon viel probiert)
Das steht doch direkt unter dem Beitrag von Daniel.
Entweder der Funktion den passenden Flag als Parameter mitgeben, oder in der Deklaration den Parameter entfernen und manuell in Zeile 25 einfügen, wenn die Funktion wie bei dir immer das Gleiche machen soll. |
Re: Problem mit Herunterfahren (schon viel probiert)
Ich mache das so:
Delphi-Quellcode:
type
TExit=(Reboot,Shutdown,Logoff,Hibernate,Standby); procedure ExitWin(Exit:TExit;Force:boolean); //Urheber: [url]www.delphipraxis.net[/url] (Daniel B. & NikoMitDaMacht) var Flags:integer; begin GetShutdownPrivileges; if Exit=Shutdown then ExitWindowsEx(EWX_ShutDown,0); if Exit=Hibernate then SetSystemPowerState(false,Force); if Exit=Standby then SetSystemPowerState(true,Force); if Exit=Logoff then begin Flags:=EWX_LOGoff; if Force then flags:=flags+EWX_FORCE; ExitWindowsEx(flags,0); end; if Exit=Reboot then begin flags:=EWX_REBOOT; if Force then flags:=flags+EWX_FORCE; ExitWindowsEx(flags,0); end; end;
Delphi-Quellcode:
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,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); end; end;
Delphi-Quellcode:
Lucky hatte zwar schonmal was dagegen, weil ich eine exception oder so weggelassen habe, aber bei mir funktioniert das wunderbar (Win XP) :cheers:
procedure TForm1.Button1Click(Sender: TObject);
begin ExitWin(Shutdown,true); end; greetings ... |
Re: Problem mit Herunterfahren (schon viel probiert)
Danke an alle werde das mal ausprobieren.
Edit: Hey klappt 1 a (hoffe mein Lehrer kann mir das in der nächsten Stunden bis ins kleinste Detail erklären) nochmal dank danke. |
Re: Problem mit Herunterfahren (schon viel probiert)
Dein Lehrer sollte dir eigentlich die Grundlagen der Sprache vermitteln und nicht die Funktionsweise von einem speziellen Betriebssystem und seinen APIs.
|
Re: Problem mit Herunterfahren (schon viel probiert)
Wen interessiert, wie das funktioniert? Coyp&Paste ist das A und O hier, finde ich ;-) Wenn man eine Prozedur, Funktion oder gewisse Klassenaufrufe oft braucht, dann lernt man das eigentlich gleich mit, was das bedeutet. Allerdings wäre ich gespannt, ob dein Lehrer weiß, was das alles bedeutet in GetShutdownPrivileges() *ggg*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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