请仔细阅读;这不是通常的正常运行时间问题。
我倾向于不关闭我的电脑本身,而是让它进入睡眠状态。它使启动时间更快,并允许我使用 WOL。各种“uptime”方法(sysinfo、uptime.exe、任务管理器等)将显示自上次完全启动以来的时间,这意味着睡眠时间被考虑在内。我正在寻找真的正常运行时间;也就是说,仅自上次启动以来我的 PC 处于唤醒状态的时间。
答案1
没有软件可以做到这一点,所以唯一能做到这一点的方法是编写一个脚本,基本上每秒(或每分钟)给变量增加 1,并有办法读取变量的值。如果您的 PC 处于休眠/睡眠等状态,则脚本不会运行,因此计数器不会增加。
如果这样的脚本在后台持续运行,很可能会对系统产生影响,所以问题是,你有多想要这样做?
(对脚本产生影响的原因)脚本运行的时间越长,数字就越高,而非常高的值意味着需要更多的内存来存储。(谈论不能是整数(65535)的值,但我想如果将其提高到这么高,您的系统必须启动并运行数天/数周。当然,您可以编写脚本来计算天数并重置可以消除这种情况的值,但如果您的脚本在其周期中经历更多的代码,这本身也会对它产生影响,即使影响很小。
答案2
Windows 生成从睡眠状态唤醒的系统事件(事件 ID:1,来源:Power-Troubleshooter)。此事件包含睡眠和唤醒时间。
来源:唤醒源 - 读取事件查看器日志 - Windows 7 帮助论坛
要确定您的“真实正常运行时间”值,请确定上次启动时间(来自您提到的来源),然后从任何后续唤醒事件中减去睡眠时间。
注意:您可以创建一个应用程序来使用 .NET 库查询事件日志(超级用户的主题外)。
答案3
您对“真正正常运行时间”的定义有多灵活?LPChip 的答案 是编写由工作站锁定和工作站解锁触发的计划任务,然后进行显而易见的计算。
如果数学计算还不明显的话:
- 跟踪两个值:“逻辑”启动时间和累计正常运行时间。每次只有一个值有效。因此,可以说,您还需要一个标志来跟踪其中哪个值有效,尽管这实际上可以通过上下文来确定。
- 我猜您还想要一个在系统启动时运行的事件,或者有其他机制将“逻辑”启动时间初始化为实际启动时间。
- 当工作站锁定时,从当前时间中减去逻辑启动时间并将其保存为累计正常运行时间。
- 当工作站解锁时,从当前时间中减去累计启动时间并将其保存为逻辑启动时间。
- 根据要求,从当前时间中减去逻辑启动时间,并将其报告为“真实”启动时间。(这将为您提供 PC 解锁的总时间。)
例如,
- 如果您在上午 9 点进行硬启动,则会将上午 9 点保存为逻辑启动时间。
- 如果你在中午锁定机器,这样可以节省 3 小时(中午 - 上午 9 点)作为累计正常运行时间。
- 如果您在下午 1 点解锁机器,则会将上午 10 点(下午 1 点 - 3 小时)保存为逻辑启动时间。
- 如果您要求在下午 6 点启动,则会报告 8 小时
(下午 6 点 - 上午 10 点 =(中午 - 上午 9 点)+(下午 6 点 - 下午 1 点)。)
如果您能弄清楚如何触发任务在睡眠和唤醒时运行,那么就这样做吧,它就会得到您想要的结果。(但让机器进入睡眠状态会触发 Lock 任务,我假设您已将系统配置为需要在唤醒后解锁。)