怎么读取系统安装日期(已知:Delphi源码)
怎么读取系统安装日期与开机时间呢?我知道用注册表,但是我不知道怎么读取这样的类型。请指点我!NO.1 作者: ljmanage
系统安装时间
function DateInstallWindows (var DateInstall: TDateTime):Boolean;
var
RegDate: TRegistry;
Buffer: Integer;
begin
Result:=False;
RegDate := TRegistry.Create;
try
RegDate.RootKey := HKEY_LOCAL_MACHINE;
if Win32Platform = VER_PLATFORM_WIN32_NT Then
Begin
if RegDate.OpenKey(Software\Microsoft\Windows NT\CurrentVersion, True)
then
Begin
RegDate.ReadBinaryData(InstallDate,Buffer, sizeof (Buffer));
DateInstall:=StrToDateTime (FormatDateTime(dd/mm/yyyy hh:nn, FileDateToDateTime(Buffer)));
Result:=True;
end
end
else
if RegDate.OpenKey(Software\Microsoft\Windows\CurrentVersion, True)
then
Begin
RegDate.ReadBinaryData(FirstInstallDateTime,Buffer, sizeof (Buffer));
DateInstall:=StrToDateTime (FormatDateTime(dd/mm/yyyy hh:nn, FileDateToDateTime(Buffer)));
Result:=True;
end
finally
RegDate.CloseKey;
RegDate.Free;
end;
end;
2.用法
procedure TForm1.BitBtn2Click(Sender: TObject);
var
TheDate: TDateTime;
begin
if DateInstallWindows (TheDate) Then Label1.Caption:=DateTimeToStr (TheDate);
end;
以上应该是Delphi代码,能否转换成au3,高手指教!!!
可以看出数据是保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion InstallDate中,关键是如何转换成正常日期来显示!!!
[ 本帖最后由 mhgd 于 2008-8-14 11:42 编辑 ] $wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem ", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$InstallDate=WMIDateStringToDate($objItem.InstallDate)
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_OperatingSystem" )
Endif
MsgBox(0,"InstallDate",$InstallDate)
Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 7, 2) & "/" & _
StringMid($dtmDate, 5, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndFunc ;==>WMIDateStringToDate 楼上的高人,现在还没有休息吗? 革命仍未成功,继续通宵作战 原帖由 sanhen 于 2008-8-14 01:03 发表 http://www.autoitx.com/images/common/back.gif
革命仍未成功,继续通宵作战
:face (36):
太感到人了! 感谢老大帮我解题,只是能否不使用WMI,而直接从注册表中读取出来呢??? 非常抱歉,昨晚没有查到注册表安装时间的算法。刚查到的。
http://support.microsoft.com/?id=232227
#Include <Date.au3>
$InstallDate = RegRead("HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\", "InstallDate")
$InstallDate = _DateAdd( 's',$InstallDate, "1970/01/01 00:00:00")
MsgBox(64, "测试", "系统安装时间是:" & $InstallDate)
查安装时间的方法多得是。还有其他两种方法CMD和API的,略过不说了。
只要搞清楚时间的算法原理,注册表的是最简单的 怪不得我怎么转换都不对呢,原来要加上个基数啊,太感谢你了,用wmi太复杂了,还是注册表比较简单一点,
基数应该是:1970/01/01 00:00:00 ,但我用systeminfo.exe查出来比较会缺8小时,基数是:1970/01/01 08:00:00时,与systeminfo.exe查出来的分秒不缺了。也不知道为什么。。。 可能是中美时间差吧。。。
[ 本帖最后由 mhgd 于 2008-8-15 12:26 编辑 ] :face (2): 我直接用的systeminfo,现在又学习了一招
$InstallDate = _DateAdd( 's',$InstallDate, "1970/01/01 08:00:00")
与cmd输入systeminfo查出来一致 好东西,学习了。 不错,学习了,收藏备用 学习 啦 谢谢 以上的能人 谢谢提供,又学到了,呵呵
页:
[1]