admin管理员组

文章数量:1122852

有时候我们经常会使用到Win系统的休眠或睡眠,从而让系统再次启动时能快速恢复之前的使用状态。

而我们自己做程序时,有时候会因为休眠或睡眠导致程序的暂停运行或其他因需要处理的逻辑。为此,我们需要让程序知道已由休眠或睡眠唤醒并启动完成。

这里需要用到Win系统的电源管理消息:WM_POWERBROADCAST 消息。
WM_POWERBROADCAST 消息不区分不同的低功耗状态 。 应用程序可以决定只系统正在进入或已经恢复从低功耗状态; 它无法确定具体的电源状态。系统在 Windows 系统事件日志中记录有关电源状态转换的详细信息 。

电源管理事件。wParam 此参数可以是以下事件标识符之一。

事件含义
PBT_APMPOWERSTATUSCHANGE 10(0xA)电源状态已更改。
PBT_APMRESUMEAUTOMATIC 18(0x12)操作将从低功耗状态自动恢复。每次系统恢复时都会发送此消息。
PBT_APMRESUMESUSPEND 7(0x7)从低功耗状态恢复运行。如果恢复是由用户输入(例如按键)触发的,则此消息在PBT_APMRESUMEAUTOMATIC之后发送。
PBT_APMSUSPEND 4(0x4)系统正在暂停操作。
PBT_POWERSETTINGCHANGE 32787(0x8013)收到电源设置更改事件。

Delphi 增加如下过程

procedure WMPowerBroadCast(var msg: TMessage);message WM_POWERBROADCAST;//监听Power广播消息

然后实现过程内容

procedure TForm_Main.WMPowerBroadCast(var msg: TMessage);
begin
  //检测操作系统自动从低功耗状态恢复。 休眠后开机
  if (msg.Msg=WM_POWERBROADCAST) and (msg.WParam=PBT_APMRESUMEAUTOMATIC) then
  begin
  // .....  需要处理的业务逻辑
  end;
end;

在Windows Vista以上操作系统不支持以下消息 :

PBT_APMQUERYSTANDBY
PBT_APMQUERYSTANDBYFAILED
PBT_APMSTANDBY
PBT_APMRESUMESTANDBY

本文标签: 检测系统睡眠