如何检测Windows即将进入休眠或暂停状态?

16
我正在使用。
SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(
    SystemEvents_PowerModeChanged
);

如何判断Windows正在进入睡眠状态。但是,我怎么知道它是进入休眠还是暂停?

有没有 .Net 或 PInvoke 方法可以实现这一点?

3个回答

10

你无法区分休眠和挂起的区别。

详细讨论请参见这里

重要信息是,你提出的问题基于一个错误的二元对立:可能是休眠、挂起或混合睡眠... 当混合睡眠从挂起转换到休眠时,用户代码甚至没有运行(实际上可能没有代码运行,转换发生在断电情况下)。

所以当决定进行混合睡眠时,系统不知道它将从挂起还是从休眠中恢复,它也不能告诉你它不知道的东西。


1
根据MSDN,e.Mode的值(您的事件处理程序应该有第二个参数PowerChangedEventArgs e)将是“Resume”,“StatusChange”或“Suspend”中的一个枚举。然而,它似乎没有提供更多的细节,因此可以假设如果状态是Suspend,则PC要么正在睡眠,要么正在休眠。

希望对您有所帮助,

本杰明


0

我使用 e.mode 参数的 'Suspend' 状态,以在系统进入关机时触发操作。

//Register for event
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;

//Do stuff when system shutsdown
private static void SystemEvents_PowerModeChanged(object sender, 
PowerModeChangedEventArgs e)
{
if (e.Mode.ToString() == "Suspend")
{
//do stuff
}

您还可以使用以下事件来触发休眠事件:
//Register for session ending events
SystemEvents.SessionEnding += c_SessionEndedEvent;

//The delegate handler
private static void c_SessionEndedEvent(object sender, SessionEndingEventArgs e)
{
//Do stuff here
}

你还可以使用PowerModeChanged事件来指定系统恢复时的行为。
但是当系统进入睡眠状态时,这种方法不起作用... 不过我从未遇到过需要这样做的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接