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.
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.
Comment