// Der PC wird in
den Ruhezustand oder in den Standby-Modus versetzt
(aus dem
//
man ihn durch
einen beliebigen Tastendruck wieder erwecken kann).
// Wenn aber der Computer in den Ruhezustand wechselt, wird der Inhalt
// des Speichers gesichert und der PC heruntergefahren. Wird er wieder
gestartet,
// kehrt er zum vorigen Zustand zurück.
// Wenn Sie einen Computer in den Ruhezustand setzen wollen, ist
zunächst zu
// prüfen, ob der Rechner den Ruhezustand tatsächlich unterstützt, also
ob
// bei den Energieoptionenen der Systemsteuerung das Kästchen für den
// Ruhezustand aktiviert ist.
// Der Typ "Vorgehensweise" ist dafür zuständig, unabhängig von der
Rückmeldung
// laufender Anwendungen und Treiber das Überführen in den jeweiligen
Zustand
// sofort zu erzwingen.
// Getestet mit D4 unter XP
type
Vorgehensweise = (ProgrammeAnfragen, BrutalSofort);
WelcherZustand = (Ruhezustand, Standby);
function IsPwrHibernateAllowed: Longint; external 'Powrprof.dll';
var
Zustand: function(Hibernate, ForceCritical, DisableWakeEvent: BOOL):
BOOL stdcall = nil;
function SetSuspendState(was: WelcherZustand; wie: Vorgehensweise): byte;
var
H: HMODULE;
function ProcAddress(Modul, Funktion: PChar): Pointer;
begin
H := LoadLibrary(Modul);
if H <> 0 then result := getProcAddress(H, Funktion)
else result := nil;
end;
begin
if (was = Ruhezustand) and (IsPwrHibernateAllowed = 0)
then begin
result := 2;
exit;
end;
if not assigned(Zustand) then
@Zustand := ProcAddress('POWRPROF.dll', 'SetSuspendState');
if assigned(Zustand) then begin
result := ord(not Zustand(was = Ruhezustand, wie = BrutalSofort, false));
end else result := 1;
if H <> 0 then FreeLibrary(H);
end;
// Beispielaufruf:
procedure TForm1.Button1Click(Sender: TObject);
begin
case SetSuspendState(Standby, ProgrammeAnfragen) of
1: showmessage('Aufruf fehlgeschlagen.');
2: showmessage('Der Ruhezustand wird von Ihrem PC nicht unterstützt.');
end;
end;
|