小弟用C++写了个程序获取系统最近一次关机时间,读取了注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows的ShutdownTime的值。虽然可以正确的读取,但是读出来的内容是一个byte类型的8个字节的值,一直没找到如何把这个值变为可读形式的函数。我知道一种转换方式如下:
time_t tLastTime;
tLastTime= time(NULL);
struct tm * tblock = localtime(&tLastTime);
然后就可以使用tblock了。但是如何正确的把那8个字节转换为64位的time_t值,我却不知道该怎么办了。不知道哪位大哥能帮帮小弟。谢谢啦。下面是我在网上找到的C#和VB对这个问题的解决方式,但是C++版的一直没找到...T_T
C#
public static DateTime GetLastSystemShutdown()
{
   string sKey = @"System\CurrentControlSet\Control\Windows";
   Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey);
 
   string sValueName = "ShutdownTime";
   byte[] val = (byte[])key.GetValue(sValueName);
   long valueAsLong = BitConverter.ToInt64(val, 0);
   return DateTime.FromFileTime(valueAsLong);
}
VBS
strValueName = "HKLM\SYSTEM\CurrentControlSet\Control\Windows\ShutdownTime" 
Set oShell = CreateObject("WScript.Shell") 
Ar = oShell.RegRead(strValueName) 
Term = Ar(7)*(2^56) + Ar(6)*(2^48) + Ar(5)*(2^40) + Ar(4)*(2^32) + Ar(3)*(2^24) + Ar(2)*(2^16) + Ar(1)*(2^8) + Ar(0) 
Days = Term/(1E7*86400) 
'北京时区GMT+8 
Days = Days+8/24 
PP   = CDate(DateSerial(1601, 1, 1) + Days)