Last week I noticed that the Boot Time shown on my BGInfo generated desktop wallpaper had a date of several days ago. This is because of the new Fast Startup feature introduced with Windows 8.
In short, when you shutdown Windows 8 the kernel session is hibernated, so the next time you power on your computer the system starts from that hibernated session. When you initiate a Restart then the system does not hibernate the kernel session but really performs a cold boot. The default boot time shown in BGInfo only shows the cold boot time.
For more details about Fast Boot I recommend reading Shutdown and Fast startup in Windows 8 and Delivering fast boot times in Windows 8
Here’s my BGInfo generated desktop wallpaper I had first.

And here the new one that shows the Cold Boot time and the time when the system did a fast startup.

To add this to your own BGInfo template, copy the code below into a file called bg_wakeuptime.vbs and copy the script file into the BGInfo application folder. Then open BGInfo.exe, select the Custom button

Create a ne field that has the following properties

‘==================================================================================================’
’ NAME: bg_wakeuptime.vbs
’
’ AUTHOR: Alex Verboon / Claude Henchoz
’
’ DATE: 22.09.2012
’
’ PURPOSE: Read last Wakeup and Sleep time from Windows Eventlog
’
’ PRE-REQUISITES: Windows 7 / Windows 8
’
’ USAGE: Run from BGINFO
’ If you want to run the script directly then remove the line “Echo xWakeTime”
’ and uncomment the lines below “Print local dates”
’
’ EXITCODES: none
’
’ CREDITS: http://www.w3.org/TR/xmlschema-2/#dateTime
’ http://technet.microsoft.com/en-us/library/ee156576.aspx
’ Microsoft Technet Forums
’ Claude Henchoz for Code optimization
’
’
’ VERSIONCONTROL: Date Version Modified by Changes
’ —- ——- ———– ————-
’ 22.09.12 1.0 av/ch Initial version
‘==================================================================================================
‘Initialize
Set WMI = GetObject(“winmgmts:”)
Set Sh = CreateObject(“WScript.Shell”)
Set RE = New RegExp
RE.Global = True
RE.Pattern = “\d+”
‘Run query
Set Evt = WMI.ExecQuery(“select * from Win32_NTLogEvent where " & _
“Logfile = ‘System’ and " & _
“SourceName = ‘Microsoft-Windows-Power-Troubleshooter’ and " & _
“EventCode = ‘1’”)
if Evt.Count = 0 Then
’ no events found
xWakeTime = “Never”
xSleeptTime = “Never”
Else
‘Extract dates from first hit
For Each Line In Split(Evt.ItemIndex(0).Message,vbNewLine)
Select Case Left(Line, 6)
Case “Sleep "
SleepDateUTC = DateFromEventDate(Line)
xSleepTime = UTC2LocalDate(SleepDateUTC)
Case “Wake T”
WakeDateUTC = DateFromEventDate(Line)
xWakeTime = UTC2LocalDate(WakeDateUTC)
End Select
Next
End if
‘Print local dates
‘WScript.echo “SLEEP: " & xSleepTime
‘WScript.echo “WAKE : " & xWakeTime
Echo xWakeTime
‘==================================================================================================
‘Functions
‘==================================================================================================
‘Functions
Function DateFromEventDate(EventString)
Set DateParts = RE.Execute(EventString)
DateYear = DateParts(0)
DateMonth = DateParts(1)
DateDay = DateParts(2)
DateHour = DateParts(3)
DateMinute = DateParts(4)
DateSeconds = DateParts(5)
DateDecimal = DateParts(6)
DateFromEventDate = CDate(DateDay & “/” & DateMonth & “/” & DateYear & " " & _
DateHour & “:” & DateMinute & “:” & DateSeconds)
End Function
Function UTC2LocalDate(UTCDate)
Offset = Sh.RegRead(“HKEY_LOCAL_MACHINE\System\CurrentControlSet" & _
“Control\TimeZoneInformation\ActiveTimeBias”)
UTC2LocalDate = DateAdd(“n”,-Offset,UTCDate)
End Function