Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Computer in den Standbymodus fahren (https://www.delphipraxis.net/39015-computer-den-standbymodus-fahren.html)

Delphi Star 27. Jan 2005 14:25


Computer in den Standbymodus fahren
 
Wie kann man aus einer Delphi-Anwendung heraus den Computer in den Standbymodus fahren :?:
Es muss nur auf Windows NT-Systemen funktionieren.

Binärbaum 27. Jan 2005 14:30

Re: Computer in den Standbymodus fahren
 
Also ich weiß, dass man es machen kann, aber nichtmehr, wie man es macht. Ich glaube, das hatte was mit der windowseigenen Datei rundll32.exe zu tun hatte. Wenn man diese datei aufruft, kann man den PC runterfahren, in den Standby-Modus versetzen, ausschalten, usw..
Leider weiß ich nicht mehr genau, wie das funktioniert.

MfG
Binärbaum

gothic_mike 28. Jan 2005 11:17

Re: Computer in den Standbymodus fahren
 
Zitat:

Zitat von Delphi Star
Wie kann man aus einer Delphi-Anwendung heraus den Computer in den Standbymodus fahren :?:
Es muss nur auf Windows NT-Systemen funktionieren.


versuchs mal damit:

Delphi-Quellcode:
function Power(idx: byte): Boolean;
var TokHandle, ProcHandle: THandle;
    TokPriv, TokPrivPrev: TTokenPrivileges;
    RetLen: DWORD;
begin
  Result := False;
  ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, True, GetCurrentProcessID);
  try
    if not OpenProcessToken(ProcHandle, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokHandle) then Halt(1);
  finally
    CloseHandle(ProcHandle);
  end;

  try
    if LookupPrivilegeValue('', 'SeShutdownPrivilege', TokPriv.Privileges[0].Luid) then begin
      TokPriv.PrivilegeCount := 1;
      TokPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      AdjustTokenPrivileges(TokHandle, False, TokPriv, SizeOf(TokPrivPrev), TokPrivPrev, RetLen);
    end;
  finally
    CloseHandle(TokHandle);
  end;

  case idx of
    1: Result := ExitWindowsEx(EWX_LOGOFF , 0);  // logoff
    2: Result := ExitWindowsEx(EWX_REBOOT , 0);  // reboot
    3: Result := ExitWindowsEx(EWX_SHUTDOWN, 0);  // shutdown
    4: Result := SetSystemPowerState(True, True); // suspend
    5: Result := SetSystemPowerState(False, True); // hibernate
  end;
end;
diese Function hab ich mal irgendwo im Netz gefunden, weisaber nicht mehr wo...
funktioniert bei mir unter XP+SP2 einwandfrei...


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