如何抓取上次windows从睡眠或休眠模式中醒来?

How to grab last time windows awoke from sleep or hibernate modes?

超级用户的

This question 有一些答案。我已经查看了所有提供的链接文档,但是文档很多,我真的不知道我在寻找什么具体的调用...

基本上我想做的是获取 Windows 从睡眠或休眠模式恢复的最后一次(DateTime 或其他)。

我也看到了 this question 但我不想订阅事件,因为当 sleep/resume 从睡眠中发生时,程序可能不是 运行,或者换句话说,我可能需要在它发生后数小时或数天检查最后一次睡眠恢复。

您可以使用 Windows 事件日志获取此信息,方法是查看系统日志中最近的条目以获得 "Microsoft-Windows-Power-Troubleshooter" 的来源。

这是一个示例控制台应用程序,用于打印出为该来源编写的最新项目的时间:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace Demo
{
    class Program
    {
        static void Main()
        {
            var eventLog = new EventLog("System");

            var mostRecentWake =
                EnumerateLog(eventLog, "Microsoft-Windows-Power-Troubleshooter")
                .OrderByDescending(item => item.TimeGenerated)
                .First();

            Console.WriteLine(mostRecentWake.TimeGenerated);
        }

        public static IEnumerable<EventLogEntry> EnumerateLog(EventLog log, string source)
        {
            foreach (EventLogEntry entry in log.Entries)
                if (entry.Source == source)
                    yield return entry;
        }
    }
}

请注意,这假设最近的条目将用于唤醒,(根据检查)它应该是。

如果您想确保检查的条目正确无误,则可以执行以下操作(当然,这仅在消息为英文时有效):

var mostRecentWake =
    EnumerateLog(eventLog, "Microsoft-Windows-Power-Troubleshooter")
    .Where(item => item.Message.StartsWith("The system has returned from a low power state."))
    .OrderByDescending(item => item.TimeGenerated)
    .First();