检查计算机从休眠状态恢复的原因
Check the reason the computer resumed from hibernation
我正在创建一个使计算机休眠几个小时甚至整整一周的应用程序(使用 WaitableTimer 和 WaitForSingleObject)。
电脑唤醒的三种原因
- 可等待的计时器已过期,计算机如期恢复。
- 用户按下恢复计算机的电源按钮。
- 计算机意外启动。
前两个原因完全可以接受,它们是系统设计的目的。第三个原因当然不太好。
我希望能够区分这三个开机原因。有什么办法吗?在这里看来,在第一种情况下,WaitForSingleObject
方法应该 return WAIT_OBJECT_0
(source)。如果不是这种情况,则可能是场景 2 或场景 3,但我不确定如何区分这两者。是否有API查看从待机中恢复的原因?
另一个(更好的)选项是禁止其他 devices/software 唤醒计算机(例如消除场景 3)。当我 运行 powercfg -devicequery -wake_armed
时(当我 运行 命令现在它 returns NONE 时,我已经禁止我看到的所有设备的唤醒功能。是否有类似的方法来查看已安排计算机唤醒的所有(活动)软件?
(如果它对计算机有任何帮助,则此软件的设计目标是 Surface 3 pro,其中包含(并更新)Windows 8.1 OS 安装)
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,只要它是可配置的。
按照 this article (particularly seeing what last woke it up with powercfg -lastwake
) I found a mention (in this linked article 中的说明进行操作后:
Windows 10 has a new “feature” that wakes the computer up for what
they call “important wake timers”, and you will want to disable that
if your computer is waking up all the time. Head into Power Options
just like we show above, and then find Sleep -> Allow wake timers ->
Plugged in and change the setting from Important Wake Timers Only to
Disable.
(强调我的)
很确定这是将我的计算机从休眠状态唤醒的罪魁祸首,但尚未确认。
我正在创建一个使计算机休眠几个小时甚至整整一周的应用程序(使用 WaitableTimer 和 WaitForSingleObject)。
电脑唤醒的三种原因
- 可等待的计时器已过期,计算机如期恢复。
- 用户按下恢复计算机的电源按钮。
- 计算机意外启动。
前两个原因完全可以接受,它们是系统设计的目的。第三个原因当然不太好。
我希望能够区分这三个开机原因。有什么办法吗?在这里看来,在第一种情况下,WaitForSingleObject
方法应该 return WAIT_OBJECT_0
(source)。如果不是这种情况,则可能是场景 2 或场景 3,但我不确定如何区分这两者。是否有API查看从待机中恢复的原因?
另一个(更好的)选项是禁止其他 devices/software 唤醒计算机(例如消除场景 3)。当我 运行 powercfg -devicequery -wake_armed
时(当我 运行 命令现在它 returns NONE 时,我已经禁止我看到的所有设备的唤醒功能。是否有类似的方法来查看已安排计算机唤醒的所有(活动)软件?
(如果它对计算机有任何帮助,则此软件的设计目标是 Surface 3 pro,其中包含(并更新)Windows 8.1 OS 安装)
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,只要它是可配置的。
按照 this article (particularly seeing what last woke it up with powercfg -lastwake
) I found a mention (in this linked article 中的说明进行操作后:
Windows 10 has a new “feature” that wakes the computer up for what they call “important wake timers”, and you will want to disable that if your computer is waking up all the time. Head into Power Options just like we show above, and then find Sleep -> Allow wake timers -> Plugged in and change the setting from Important Wake Timers Only to Disable.
(强调我的)
很确定这是将我的计算机从休眠状态唤醒的罪魁祸首,但尚未确认。