Einzelnen Beitrag anzeigen

Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#3

Re: Auf Standby/Ruhezustand überprüfen

  Alt 20. Jul 2006, 12:59
Du kannst nicht prüfen, ob gerade der Standby oder Ruhezustand an ist, da dein Programm in dieser Zeit "lahmgelegt" ist

Du kannst aber reagieren, wenn der PC in einen dieser Modi wechselt.
Dazu einfach folgende Funktion zum Formular hinzufügen:
Delphi-Quellcode:
type Form1...
public
procedure WndProc(var MyMessage: TMessage); override;
...
Und so dann aufbauen:
Delphi-Quellcode:
procedure TForm1.WndProc(var MyMessage: TMessage);
begin
if MyMessage.Msg = WM_POWERBROADCAST then begin
 // windows powermanagement message
 if (MyMessage.WParam = PBT_APMQUERYSUSPEND) or
 (MyMessage.WParam = PBT_APMQUERYSTANDBY)
 then begin
  // Hier hin, was getan werden muss, bevor Windows in den Standby darf,
  // z.B. Netzwerk- oder Datenbankverbindungen trennen, Timer abstellen, etc.

  MyMessage.Result := 1; // allow standby/hibernation
  // MyMessage.Result := BROADCAST_QUERY_DENY; // deny standby/hibernation

end else if (MyMessage.WParam = PBT_APMRESUMECRITICAL) or
 (MyMessage.WParam = PBT_APMRESUMESUSPEND) or
 (MyMessage.WParam = PBT_APMRESUMESTANDBY)
 then begin
  // Hier z.B. Verbindungen wiederherstellen
 end;
  end;
  inherited WndProc(MyMessage);
end;
Falls die Konstanten fehlen:
Delphi-Quellcode:
PBT_APMQUERYSUSPEND = $0000;
PBT_APMQUERYSTANDBY = $0001;

PBT_APMQUERYSUSPENDFAILED = $0002;
PBT_APMQUERYSTANDBYFAILED = $0003;

PBT_APMSUSPEND = $0004;
PBT_APMSTANDBY = $0005;

PBT_APMRESUMECRITICAL = $0006;
PBT_APMRESUMESUSPEND = $0007;
PBT_APMRESUMESTANDBY = $0008;

PBTF_APMRESUMEFROMFAILURE = $00000001;

PBT_APMBATTERYLOW = $0009;
PBT_APMPOWERSTATUSCHANGE = $000A;

PBT_APMOEMEVENT = $000B;
PBT_APMRESUMEAUTOMATIC = $0012;
Manuel
  Mit Zitat antworten Zitat