Win10系统如何获取准确的上次关机/启动时间?现有方案结果不符
问题根本原因
Windows 10及以上版本默认启用「快速启动」功能,用户日常点击的关机按钮触发的不是完整关机流程,属于深度休眠(S4)状态,不会更新你现有方案依赖的三个记录点:系统运行时长计数器不会重置、注册表ShutdownTime字段不会更新、也不会生成常规关机对应的事件日志条目。只有重启操作、关闭快速启动后的关机操作才会触发上述记录更新,这就是你当前仅能查询到昨日重启时间的核心原因。
解决方案
- 方案1:调整事件日志查询逻辑,覆盖全场景开关机记录
你原有代码仅匹配了完整开关机对应的事件ID,需要补充快速启动场景的事件过滤规则:- 完整关机事件:来源
EventLog的ID 6006、来源User32的ID 1074 - 快速启动关机事件(普通关机):来源
Kernel-Power的ID 42 - 完整启动事件:来源
EventLog的ID 6005 - 快速启动唤醒事件:来源
Kernel-Power的ID 107
调整过滤逻辑后即可查询到所有开关机记录,注意读取系统事件日志的代码需要管理员权限才能正常获取全部条目。
- 完整关机事件:来源
- 方案2:关闭快速启动功能,兼容原有代码
不需要快速启动的加速效果时,可直接关闭该功能,你现有的三段代码即可正常返回所有开关机时间:- 打开控制面板→电源选项→选择电源按钮的功能
- 点击「更改当前不可用的设置」
- 取消勾选「启用快速启动(推荐)」,保存修改即可生效
- 额外注意事项:如果你的程序运行在32位模式下,读取64位系统的注册表会被自动重定向,导致拿到旧的
ShutdownTime值,可将项目生成目标改为x64,或调用Win32 API关闭注册表重定向后再读取。
内容的提问来源于stack exchange,提问作者Admiral Land
相关产品推荐
相关产品推荐

