如何抓取上次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();
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();