检查计算机从hibernate状态恢复的原因

我正在创build一个应用程序,使计算机hibernate几个小时甚至整整一周(使用WaitableTimer和WaitForSingleObject)。

计算机唤醒的原因有三个

  1. 等待定时器过期,计算机按计划恢复。
  2. 用户按下恢复电脑的电源button。
  3. 计算机意外启动。

前两个理由是完全可以接受的,它们是系统devise的目的。 第三个原因当然不是很好。

我希望能够区分这三个原因。 有没有办法做到这一点? 在这里看来,在第一种情况下, WaitForSingleObject方法应该返回WAIT_OBJECT_0 (source) 。 如果情况并非如此,那么情况2或3,但我不知道如何区分两者。 有没有API来检查从待机恢复的原因?

另一个(更好的)选项是禁止其他设备/软件唤醒计算机(例如消除scheme3)。 当我运行powercfg -devicequery -wake_armed (当我运行命令现在返回NONE)时,我禁止了所有设备的唤醒function。 是否有类似的方法来查看所有已安排计算机唤醒的(活动)软件?

(如果它的任何帮助计算机这个软件是专为一个表面3亲,安装了包括(和更新)的Windows 8.1操作系统)

Solutions Collecting From Web of "检查计算机从hibernate状态恢复的原因"

1 /您可以查询Windows事件日志以查看导致计算机唤醒的原因:

  var log = new EventLog("System"); var wakeUpEntry = (from entry in log.Entries.Cast<EventLogEntry>() where entry.Source == "Microsoft-Windows-Power-Troubleshooter" && entry.InstanceId == 1 orderby entry.TimeWritten descending select entry).First(); Console.WriteLine("{0}", wakeUpEntry.Message); 

该消息有一个“Wake Source”条目(例如“4USB Root Hub”),如果你真的想要以编程的方式进行分析,你可以解析它。

2 /您可以使用此命令检查是否有任何Windows或外部程序在系统上设置了唤醒定时器:

 powercfg -waketimers 

如果这两个命令(你的或者这个命令)都没有显示出来,大部分可能的原因都被消除了。

3 /你甚至可以在这台机器上完全禁用唤醒定时器。 在Windows 电源选项计划设置高级计划设置 ,禁用睡眠部分下的唤醒定时器 。 我不确定Windows计划维护是否受此影响,但是当然也可以关闭它。

4 /另一项安全措施:确保BIOS设置中的设备无论何时均可配置,都不会唤醒PC。

按照这篇文章的指示(特别是看到最后一次用powercfg -lastwake唤醒它)后,我发现一个提到(在这个链接的文章中 ):

Windows 10有一个新的“功能”将电脑唤醒,称为“重要唤醒计时器” ,如果您的计算机始终处于唤醒状态,则需要禁用该功能。 进入电源选项,就像我们上面显示的,然后找到睡眠 – >允许唤醒定时器 – >插入,并将设置从重要唤醒定时器仅更改为禁用。

(重点是我的)

很确定,这是从休眠状态唤醒我的电脑的罪魁祸首,但尚未确认。