C# 如何抓取windows上次从睡眠或休眠模式醒来的时间?

C# 如何抓取windows上次从睡眠或休眠模式醒来的时间?,c#,windows,sleep,sleep-mode,C#,Windows,Sleep,Sleep Mode,关于超级用户有一些答案。我已经查看了所有提供的链接文档,但这是大量文档,我真的不知道我在寻找什么具体的调用 本质上,我试图做的是抓取Windows最后一次从睡眠或休眠模式恢复的时间(DateTime或其他) 我也看到了,但我不想订阅事件,因为当睡眠/从睡眠恢复发生时,程序可能没有运行,或者换句话说,我可能需要在发生后几小时或几天检查最后一次睡眠恢复 您可以通过查看系统日志中“Microsoft Windows Power疑难解答”源的最新条目,使用Windows事件日志获取此信息 下面是一个示例

关于超级用户有一些答案。我已经查看了所有提供的链接文档,但这是大量文档,我真的不知道我在寻找什么具体的调用

本质上,我试图做的是抓取Windows最后一次从睡眠或休眠模式恢复的时间(DateTime或其他)


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

您可以通过查看系统日志中“Microsoft Windows Power疑难解答”源的最新条目,使用Windows事件日志获取此信息

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

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;
        }
    }
}

您可能需要以编程方式访问事件日志,在Windows Logs\System下查找源代码为“Power Troubleshooter”的项目。手动查看一下,看看它们是否有用。@MatthewWatson谢谢,这正是我需要的。我想我会开始弄清楚这个事件日志类。再次感谢您,您可能不知道“内核能力”的前缀W,或者我在哪里可以找到前缀列表?我厌倦了“MicrosoftWindowsKernelPower”,它说这个序列不包含任何元素。(我已经开始抓取睡眠时间的开始)实际上,不管怎样,我都会在日志对象中找到它,并找出发生了什么on@hellyale我尝试了
“Microsoft Windows内核电源”
来代替
“Microsoft Windows电源疑难解答”
这为我返回了一些项目。因此,我最终使用EventID而不是消息,因为似乎是权限问题,
Microsoft Windows内核电源上的消息将被替换为“找不到源“Microsoft Windows内核电源”中事件ID“42”的说明。本地计算机可能没有显示消息所需的注册表信息或消息DLL文件,或者您可能没有访问它们的权限。以下信息是事件的一部分:“4”、“4”、“4”、“0”、“35”
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();