![]() |
Ruhezustand auslösen
Hallo,
wie kann man mit Delphi den Ruhezustand auslösen? Florian |
Re: Ruhezustand auslösen
SetSuspendState(), denke ich?! Das PSDK ist dein Freund!
Alternativ: SetSystemPowerState(). |
Re: Ruhezustand auslösen
Vermutlich ShellExecute und dann ShutDown.exe mit irgendwelchen Parametern...
//Ich hätte es davor überprüfen sollen :oops: ShutDown.exe scheint keinen solchen parameterzu haben :-( |
Re: Ruhezustand auslösen
Kuck mal nach
![]() Benötigt aber (trotz des Nicht-Shutdowns) das SeShutDownPrivilege. |
Re: Ruhezustand auslösen
Hallo erstmal,
ich hab mich heute erst hier eingeloggt, aber dazu gleich mal ne Frage: dieses
Delphi-Quellcode:
oder auch das
setsuspendstate
Delphi-Quellcode:
sind ja so erstmal nciht anwendbar für Delphi 2005... Falls man sie doch direkt einbinden kann (die erforderlichen Rechte für Win XP habe ich bereits festgelegt), würde es mich interessieren, wie ich damit den Ruhezustand und den Standbyzustand für den Rechner erreichen kann.
setsystempowerstate
Habt ihr mal einen Tipp, wie man es effizient in den Quelltext einbinden kann? (bin zwar schon über das 'Hello World' Stadium hinaus, aber noch ein ziemlicher Anfänger...) Ich freu mich schon auf Antwort, Maze |
Re: Ruhezustand auslösen
Suche mal nach
![]() ![]() @Dax: Deine Aussage ist so nicht haltbar. Es findet auf Systemebene sowas wie ein Shutdown statt. Daß der Name nicht extra auf die Powerstates eingeht, ist dabei nicht von Bedeutung ;) |
Re: Ruhezustand auslösen
Zitat:
Ich Tippe einfach
Delphi-Quellcode:
Wun spätestens nach dem Punkt kommt die Liste, in der auch SetSystemPowerState enthalten ist.
Windows.SetSystemPowerState(True, False);
Wenn du das Windows. weglassen willst, musst du Windows in die Uses-Klausel mit aufnehmen, was jedoch meist schon getan ist(außer bei Konsolenanwendungen, etc.). Hast du überhaupt ein Delphi.Win32 - Projekt erstellt? Also du darfst natürlich kein .NET - Projekt haben. Sonst gehts nicht so. Grüße Faux |
Re: Ruhezustand auslösen
Zitat:
|
Re: Ruhezustand auslösen
@faux: erstmal danke für den Tipp, ich hab das Ganze folgendermaßen umgesetzt:
Delphi-Quellcode:
(...)
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
Delphi-Quellcode:
(...)
function ExitWin(flag:word): Boolean;
var vi : TOSVersionInfo; hToken : THandle; tp : TTokenPrivileges; h : DWord;
Delphi-Quellcode:
(...)
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);
Delphi-Quellcode:
Für das Tool übergebe ich mit flag entweder die Werte für das Herunterfahren, Neustarten etc. oder eben den Wert 0 für Standby und 1 für den Ruhezustand...
if flag = 0 then
result := setsystempowerstate(true,true); end Obwohl ich ein Delphi - 32 Projekt gestartet habe (sonst würde ja auch das Herunterfahren nicht funktionieren), kann ich trotzdem weder den Ruhezustand noch den Standbyzustand herbeirufen. Ist eventuell ein Fehler im Code, den ich aus Betriebsblindheit übersehen habe? Maze |
Re: Ruhezustand auslösen
Gibts einen Syntaxfehler, eine Exception oder tut sich einfach nichts.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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