0

SetSuspendState()我的应用程序在完成一项冗长的任务后使用 Win32 API 触发系统挂起或休眠。

API 接受一个参数“ForceCritical”,该参数确定系统是立即挂起还是PBT_APMQUERYSUSPEND先广播以允许其他应用程序有机会取消挂起。我的应用程序使用它与媒体播放器等其他应用程序很好地播放,所以如果你正在听音乐或其他东西,它不会暂停。

出于某种原因,从 Vista 开始,MS 改变了一些东西,所以这个参数被忽略了,所以SetSuspendState立即导致挂起,其他应用程序没有机会停止它。

有谁知道我怎样才能在 Vista 上再次获得所需的“礼貌”行为?

4

1 回答 1

1

MSDN 说

为了防止系统在 Windows Vista 中转换到低功耗状态,应用程序必须调用 SetThreadExecutionState 来通知系统它正在使用中

我猜想 WMP 会这样做,但较旧的应用程序不会。您可以通过将 WM_POWERBROADCAST:PBT_APMQUERYSUSPEND消息发送到所有顶级窗口并检查它们的返回值来模拟这一点(发送超时消息,以便挂起的应用程序不会挂起您的应用程序)

于 2009-08-26T21:50:09.413 回答