我的程序如何知道自上次运行以来Windows是否重新启动?所有版本的Windows XP及以上版本。
答案 0 :(得分:6)
这可以使用global atom table轻松完成。只要确保你的原子名称不太可能与另一个原子发生冲突。
if (GlobalFindAtom ("MySecretName") == 0)
{
// First time run since reboot
GlobalAddAtom ("MySecretName");
}
答案 1 :(得分:3)
您可以使用名为GetTickCount的Windows API调用...
http://msdn.microsoft.com/en-us/library/ms724408%28VS.85%29.aspx
编辑这个想法是,当你的程序启动时,你调用GetTickCount(它返回Windows运行了几毫秒),然后计算一个确切的开始日期(现在减去毫秒数。存储该日期,然后在下次程序启动时,再次计算日期并将其与先前存储的日期进行比较。如果日期不同,Windows已重新启动。如果可能,请使用GetTickCount64(但不要仅使用此功能对解决方案进行编码。
答案 2 :(得分:1)
您可以使用WMI:
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOS in colOperatingSystems
dtmBootup = objOS.LastBootUpTime
dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now)
Wscript.Echo dtmSystemUptime
Next
Function WMIDateStringToDate(dtmBootup)
WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
& " " & Mid (dtmBootup, 9, 2) & ":" & _
Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup, _
13, 2))
End Function
答案 3 :(得分:1)
net statistics workstation|find "Statistics since"
答案 4 :(得分:1)
Microsoft实用程序uptime.exe“处理计算机的事件日志以确定系统可用性和当前正常运行时间”。
答案 5 :(得分:0)
简单但丑陋的解决方案:只需启动一个永无止境的虚拟过程: - )
如果它还在这里,你没有重启。如果不是,那么你很可能刚刚重新启动。
答案 6 :(得分:0)
在丑陋的黑客行为中......在RunOnce注册表项中添加一些内容
答案 7 :(得分:0)
如何将文件添加到%TMP%并检查它是否仍然存在(Windows每次重启时都应清除%TMP% )
或
更强大的方式,在某处创建文件并在下次重新启动时将其标记为删除(请参阅MoveFileEx API)并检查该文件