如何检测窗口是否会hibernate或暂停?

我在用

SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler( SystemEvents_PowerModeChanged ); 

判断Windows何时挂起。 但我怎么知道它是进入hibernate还是暂停?

是否有.Net或PInvoke方法来执行此操作?

你不能分辨hibernate和suspend之间的区别。

这里有详细的讨论。

外卖的消息是,你的问题预先假定了一个错误的二分法:它可以是hibernate,暂停或混合睡眠……当混合睡眠从暂停转换为hibernate时,用户代码甚至没有运行(实际上可能没有运行代码) ,转换发生在断电的情况下)。

因此,当决定混合睡眠时,系统不知道它是从hibernate还是hibernate恢复,它不能告诉你它不知道什么。

根据MSDN ,e.Mode(您的事件处理程序应具有PowerChangedEventArgs e的第二个参数)的值将是“Resume”,“StatusChange”或“Suspend”之一的枚举。 但是,它似乎没有提供比这更详细的信息,因此假设如果状态为Suspend,则PC正在hibernate或hibernate。

HTH,

本杰明