Announcement

Collapse
No announcement yet.

Aufwachen aus dem Ruhezustand unter Win2000 mitbekommen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Aufwachen aus dem Ruhezustand unter Win2000 mitbekommen

    Folgendes Problem:
    Fahren den Rechner manuell in den Ruhezustand (auf Festplatte): Start | Beenden | Ruhezustand.

    Wenn ich den Rechner wieder starte, werden alle zum Zeitpunkt des "Einfrierens" ausgeführten Programm automatisch wieder ausgeführt.

    Wie bekommt mein Program das aber mit?

    Folgendes funktioniert NICHT!

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    AppEvnts, StdCtrls;

    type
    TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Label1: TLabel;
    Button1: TButton;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
    var Handled: Boolean);
    procedure FormDblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}
    const
    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;

    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
    var Handled: Boolean);
    begin
    case Msg.message of
    WM_POWERBROADCAST: begin
    Handled:=True;
    case DWORD(Msg.wParam) of
    PBT_APMBATTERYLOW : ShowMessage('Battery power is low. Message received');
    PBT_APMOEMEVENT : ShowMessage('OEM-defined event occurred. Message received');
    PBT_APMPOWERSTATUSCHANGE : ShowMessage('Power status has changed. Message received');
    PBT_APMQUERYSUSPEND : ShowMessage('Request for permission to suspend. Message received');
    PBT_APMQUERYSUSPENDFAILED : ShowMessage('Suspension request denied. Message received');
    PBT_APMRESUMECRITICAL : ShowMessage('Operation resuming after critical suspension. Message received');
    PBT_APMRESUMESUSPEND : ShowMessage('Operation resuming after suspension. Message received');
    PBT_APMSUSPEND : ShowMessage('System is suspending operation. Message received');
    else ShowMessage('Unknown valued with WM_POWERBROADCAST');
    end;
    end;
    end;
    end;

    procedure TForm1.FormDblClick(Sender: TObject);
    begin
    // PostMessage(handle, WM_POWERBROADCAST, PBT_APMQUERYSUSPEND, 0);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not SetSystemPowerState(false, false) then
    RaiseLastWin32Error;
    end;

    end.

  • #2
    Habe selbst die Lögung gefunden.
    Die Applications Ergeinisse funktionieren hier nicht richtig.
    Man kann aber einen direkten EventHandler schreiben

    procedure WMPowerBroadcast(var Msg: TMessage); message WM_POWERBROADCAST;<p>

    Hier ein Bespiel<p>
    procedure TForm1.WMPowerBroadcast(var Msg: TMessage);<p>
    begin<p>
    case DWORD(Msg.wParam) of<p>
    PBT_APMBATTERYLOW : Memo1.Lines.Add('Battery power is low. Message received');<p>
    PBT_APMOEMEVENT : Memo1.Lines.Add('OEM-defined event occurred. Message received');<p>
    PBT_APMPOWERSTATUSCHANGE : Memo1.Lines.Add('Power status has changed. Message received');<p>
    PBT_APMQUERYSUSPEND : Memo1.Lines.Add('Request for permission to suspend. Message received');<p>
    PBT_APMQUERYSUSPENDFAILED : Memo1.Lines.Add('Suspension request denied. Message received');<p>
    PBT_APMRESUMECRITICAL : Memo1.Lines.Add('Operation resuming after critical suspension. Message received');<p>
    PBT_APMRESUMESUSPEND : Memo1.Lines.Add('Operation resuming after suspension. Message received');<p>
    PBT_APMSUSPEND : Memo1.Lines.Add('System is suspending operation. Message received');<p>
    else Memo1.Lines.Add('Unknown value with WM_POWERBROADCAST');<p>
    end;<p>
    end;<p&gt

    Comment

    Working...
    X