为了账号安全,请及时绑定邮箱和手机立即绑定

防止Windows在我的程序运行时进入睡眠状态?

防止Windows在我的程序运行时进入睡眠状态?

蝴蝶刀刀 2019-11-29 10:35:21
我的程序运行时,我必须停止Windows进入睡眠状态。而且我不仅想阻止睡眠定时器,而且还想取消睡眠事件,只要我按下睡眠按钮或以其他任何方式主动让计算机进入睡眠状态。因此,SetThreadExecutionState是不够的。或者...实际上,我不必完全阻止睡眠,只需将其延迟5-10秒即可让程序完成任务。(我知道这是不良的程序行为,但这仅用于个人使用。)
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

我通过USB连接的硬件设备遇到了这样的问题。XP / Vista会在其中途进入睡眠/休眠状态。很好,您说,当它恢复时它就可以继续。如果硬件仍然连接!用户习惯于在需要时拔出电缆。


您需要处理XP和Vista


在XP下,捕获WM_POWERBROADCAST并查找PBT_APMQUERYSUSPEND wparam。


   // See if bit 1 is set, this means that you can send a deny while we are busy

   if (message.LParam & 0x1)

   {

      // send the deny message

      return BROADCAST_QUERY_DENY;

   } // if

   else

   {

      return TRUE;

   } // else

在Vista下使用SetThreadExecutionState像这样


// try this for vista, it will fail on XP

if (SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED) == NULL)

{

   // try XP variant as well just to make sure 

   SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);

}  // if 

当您完成应用后,将其恢复为正常


// set state back to normal


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信