// 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;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke