我的程序如何知道自上次运行以来Windows是否重新启动? 所有版本的Windows XP和。
这可以使用全局原子表来轻松地完成。 只要确保你的原子名称不太可能与另一个原子相冲突。
if (GlobalFindAtom ("MySecretName") == 0) { // First time run since reboot GlobalAddAtom ("MySecretName"); }
有一个Windows API调用,你可以叫做GetTickCount …
http://msdn.microsoft.com/en-us/library/ms724408%28VS.85%29.aspx
编辑:这个想法是,当你的程序启动时,你调用GetTickCount(它返回Windows已经运行多少毫秒),然后计算一个确切的开始日期(现在减去毫秒数)。 存储该日期,然后在下次启动程序时,再次计算日期并将其与先前存储的日期进行比较。 如果日期不同,则Windows已重新启动。 如果可能,请使用GetTickCount64 (但不要单独使用此函数对您的解决方案进行编码。
您可以使用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
net statistics workstation|find "Statistics since"
Microsoft实用程序uptime.exe “处理计算机的事件日志以确定系统可用性和当前正常运行时间”。
简单而又丑陋的解决方案 :只需发起一个永无止境的虚拟过程:-)
如果它仍然在这里,你没有重新启动。 如果不是,那么很可能是你刚刚重新启动。
在丑陋的黑客的静脉…坚持一些RunOnce注册表项
如何将文件添加到%TMP%并检查它是否仍然存在(%TMP% 应在每次重新启动时由Windows清除)
要么
更强大的方法,创建一个文件的地方,并将其标记为删除在下次重新启动(请参阅MoveFileEx API)并检查该文件