我的程序运行时,我必须停止Windows进入休眠状态。

而且我不仅要防止 sleep 定时器,而且还想取消 sleep 事件,方法是按 sleep 按钮或以其他任何方式主动让计算机进入休眠状态。因此,SetThreadExecutionState是不够的。

或者...实际上,我不必完全阻止 sleep ,只需将其延迟5-10秒,即可让我的程序完成任务。

(我知道这是不良的程序行为,但这仅用于个人使用。)

最佳答案

我通过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
SetThreadExecutionState(ES_CONTINUOUS);

关于windows - 防止Windows在我的程序运行时进入休眠状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/629240/

10-10 14:34