Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Shutdown nach bestimmter Zeit (https://www.delphipraxis.net/102971-shutdown-nach-bestimmter-zeit.html)

FreakyF 7. Nov 2007 17:52


Shutdown nach bestimmter Zeit
 
Hallo!

Ich verwende folgenden Code, um den PC herunter zu fahren:

Delphi-Quellcode:
function ExWindows(const AFlag: Word): Boolean;
var
  vi    : TOSVersionInfo;
  hToken : THandle;
  tp    : TTokenPrivileges;
  h     : DWord;
begin
  flag:= EWX_Shutdown;
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        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(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;
Wo/wie kann ich festlegen, dass der PC erst nach z.b. 1 Minute herunterfahren wird?


Vielen Dank

Markus

fLaSh11 7. Nov 2007 17:57

Re: Shutdown nach bestimmter Zeit
 
ruf doch einfach die shutdown.exe (param "-s" für herunterfahren) in C:\Windows\System32 auf und übergebe ihr den Parameter "-t 60"...

oder willst du unbedingt den Code da benutzen?

FreakyF 7. Nov 2007 18:02

Re: Shutdown nach bestimmter Zeit
 
Zitat:

Zitat von fLaSh11
ruf doch einfach die shutdown.exe (param "-s" für herunterfahren) in C:\Windows\System32 auf und übergebe ihr den Parameter "-t 60"...

oder willst du unbedingt den Code da benutzen?


Danke für die superschnelle Antwort.
Dein Vorschlag klingt interessant. Kannst du mir erklären, wie ich vorgehen muss?
Ich hab nicht gewusst, dass man überhaupt auf die shutdown.exe zugreifen kann...
Wichtig ist, dass das ganze in Delphi passiert.

Luckie 7. Nov 2007 18:13

Re: Shutdown nach bestimmter Zeit
 
Zitat:

Zitat von FreakyF
Wo/wie kann ich festlegen, dass der PC erst nach z.b. 1 Minute herunterfahren wird?

Es bleibt doch ganz dir überlassen, wann du diese Funktion aufrufst.

FreakyF 7. Nov 2007 18:32

Re: Shutdown nach bestimmter Zeit
 
Das Problem ist doch, dass man sich unter NT-Systemen erstmal die Rechte beschaffen muss.
Es wird doch nicht einfach reichen, die shutdown.exe über eine Delphi-Funktion aufzurufen oder?

Kann man mit dem Code, den ich oben angegeben habe, keine Zeit vergeben?

scrat1979 7. Nov 2007 18:33

Re: Shutdown nach bestimmter Zeit
 
Hallo!!!

Das ganze ist wirklich ganz einfach zu programmieren und noch zu erweitern (z.B. zu einer bestimmten Uhrzeit herunterfahren...) wenn Du folgendes macht (und bei DEINEM Code oben bleibst):

Hier mal ein Pseudocode (Unit DateUtils einbinden):

Delphi-Quellcode:
ShutDownDateTime : TDateTime;

[...]

ShutDownDateTime := AddMinutes(StrToInt(EditShutDownAfterXMinutes.Text), Now);

[...]
procedure Timer1OnTimer(Sender : TObject);
Begin
 If Now >= ShutDownDateTime Then Begin;
   // Hier Windows herunterfahren oder was auch immer...
 End;

End;
[...]
... zumindest so ähnlich, mal als Denkanstoß. Habe vor einigen Wochen ein selbiges Programm geschrieben, leider schon wieder gelöscht, sonst könnte ich Dir den Source posten.

SCRaT

FreakyF 7. Nov 2007 18:38

Re: Shutdown nach bestimmter Zeit
 
Der Aufruf der shutdown.exe würde dann folgendermaßen funktionieren?:

Delphi-Quellcode:
uses ShellAPI;

ShellExecute(Handle, 'open', PChar(C:\Windows\System32\shutdown.exe -s -m \\Rechnername -t %STime% -c "Herunterfahren des PCs" ), nil, nil, sw_Show);

FreakyF 7. Nov 2007 18:43

Re: Shutdown nach bestimmter Zeit
 
Zitat:

Zitat von scrat1979
Hallo!!!

Delphi-Quellcode:
ShutDownDateTime : TDateTime;

[...]

ShutDownDateTime := AddMinutes(StrToInt(EditShutDownAfterXMinutes.Text), Now);

[...]
procedure Timer1OnTimer(Sender : TObject);
Begin
 If Now >= ShutDownDateTime Then Begin;
   // Hier Windows herunterfahren oder was auch immer...
 End;

End;
[...]


SCRaT

Danke schon mal für deinen Tipp. Hab leider noch nicht ganz die Funktion verstanden.
Wenn jemand ein ähnliches Programm mit Code hat, dann würd ich mich darüber freuen :-D

Oder soll ich doch die Idee mit der shutdown.exe machen?


Markus

ringli 7. Nov 2007 18:47

Re: Shutdown nach bestimmter Zeit
 
Zitat:

Oder soll ich doch die Idee mit der shutdown.exe machen?
Ist nicht zu empfehlen da du unter Windows XP dafür Administratorrechte benötigst.

FreakyF 7. Nov 2007 18:53

Re: Shutdown nach bestimmter Zeit
 
Dann wärs schön, wenn mir jemand scrat1979's Vorschlag nochmal genauer erklären könnte.

Danke :roteyes:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Seite 1 von 2  1 2      

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