c# – 检查计算机从休眠状态恢复的原因

c# – 检查计算机从休眠状态恢复的原因,第1张

概述我正在创建一个应用程序,使计算机处于休眠状态几个小时甚至整整一周(使用WaitableTimer和WaitForSingleObject). 计算机唤醒有三个原因 >等待计时器已过期,计算机按计划恢复. >用户按下恢复计算机的电源按钮. >计算机意外打开. 前两个原因是完全可以接受的,它们是系统的设计目标.第三个原因当然不是那么好. 我希望能够区分开启这三个原因.有没有办法做到这一点?在这看来,在 我正在创建一个应用程序,使计算机处于休眠状态几个小时甚至整整一周(使用WaitableTimer和WaitForSingleObject).

计算机唤醒有三个原因

>等待计时器已过期,计算机按计划恢复.
>用户按下恢复计算机的电源按钮.
>计算机意外打开.

前两个原因是完全可以接受的,它们是系统的设计目标.第三个原因当然不是那么好.

我希望能够区分开启这三个原因.有没有办法做到这一点?在这看来,在第一种情况下,WaitForSingleObject方法应该返回WAIT_OBJECT_0 (source).如果不是这种情况,则它是方案2或3,但我不确定如何区分这两者.是否有API来检查从待机状态恢复的原因?

另一个(更好的)选项是禁止其他设备/软件唤醒计算机(例如,消除方案3).我在运行powercfg -devicequery -wake_armed时看到的所有设备都没有唤醒功能(当我现在运行命令它返回NONE时).是否有类似的方法可以查看已安排计算机唤醒的所有(活动)软件?

(如果对该软件设计的计算机有任何帮助,那么表面3 pro,安装了包含(和更新)的windows 8.1 *** 作系统)

@H_502_16@解决方法 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);

该消息有一个“唤醒源”条目(例如“4USB根集线器”),如果您真的想以编程方式执行此 *** 作,则可以解析该条目.

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

powercfg -waketimers

如果两个命令(你的或这个命令)都没有显示任何内容,那么大多数可能的原因都已被消除.

3 /您甚至可以在本机上完全禁用唤醒定时器.在windows电源选项,计划设置,高级计划设置,禁用睡眠部分下的允许唤醒计时器.我不确定windows Scheduled Maintenance是否受此影响,但您也可以将其关闭.

4 /另一种安全措施:确保BIOS设置中的任何设备都不允许在可配置的情况下唤醒PC.

@H_502_16@ @H_502_16@ 总结

以上是内存溢出为你收集整理的c# – 检查计算机从休眠状态恢复的原因全部内容,希望文章能够帮你解决c# – 检查计算机从休眠状态恢复的原因所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1244804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存