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 Problem mit Herunterfahren (schon viel probiert) (https://www.delphipraxis.net/87896-problem-mit-herunterfahren-schon-viel-probiert.html)

Bahamutsfire 6. Mär 2007 23:30


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:
ExitWindowsEx(EWX_SHUTDOWN, 0);
noch shellexecute.
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

bitsetter 6. Mär 2007 23:38

Re: Problem mit Herunterfahren (schon viel probiert)
 
Hi,

kennst du diesen Link schon?

Abmelden / Reboot / Shutdown unter Win 95/98/ME/NT

Luckie 7. Mär 2007 00:27

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.

Bahamutsfire 7. Mär 2007 08:40

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?

Nikolas 7. Mär 2007 08:45

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.

Aike 7. Mär 2007 08:56

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:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExitWin(Shutdown,true);
end;
Lucky hatte zwar schonmal was dagegen, weil ich eine exception oder so weggelassen habe, aber bei mir funktioniert das wunderbar (Win XP) :cheers:

greetings ...

Bahamutsfire 7. Mär 2007 08:59

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.

Luckie 7. Mär 2007 09:54

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.

Aike 7. Mär 2007 19:01

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