找回密码
 加入
搜索
查看: 4644|回复: 13

怎么读取系统安装日期(已知:Delphi源码)

[复制链接]
发表于 2008-8-13 22:49:40 | 显示全部楼层 |阅读模式
怎么读取系统安装日期与开机时间呢?我知道用注册表,但是我不知道怎么读取这样的类型。请指点我!

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 编辑 ]
发表于 2008-8-14 00:49:29 | 显示全部楼层
$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
发表于 2008-8-14 00:51:17 | 显示全部楼层
楼上的高人,现在还没有休息吗?
发表于 2008-8-14 01:03:54 | 显示全部楼层
革命仍未成功,继续通宵作战
发表于 2008-8-14 11:32:33 | 显示全部楼层
原帖由 sanhen 于 2008-8-14 01:03 发表
革命仍未成功,继续通宵作战


太感到人了!
 楼主| 发表于 2008-8-14 11:43:59 | 显示全部楼层
感谢老大帮我解题,只是能否不使用WMI,而直接从注册表中读取出来呢???
发表于 2008-8-14 12:22:50 | 显示全部楼层
非常抱歉,昨晚没有查到注册表安装时间的算法。刚查到的。

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的,略过不说了。
只要搞清楚时间的算法原理,注册表的是最简单的
 楼主| 发表于 2008-8-15 00:08:14 | 显示全部楼层
怪不得我怎么转换都不对呢,原来要加上个基数啊,太感谢你了,用wmi太复杂了,还是注册表比较简单一点,

基数应该是:1970/01/01 00:00:00 ,但我用systeminfo.exe查出来比较会缺8小时,基数是:1970/01/01 08:00:00  时,与systeminfo.exe查出来的分秒不缺了。也不知道为什么。。。     可能是中美时间差吧。。。

[ 本帖最后由 mhgd 于 2008-8-15 12:26 编辑 ]
发表于 2008-10-21 11:00:44 | 显示全部楼层
我直接用的systeminfo,现在又学习了一招
发表于 2008-11-1 15:01:59 | 显示全部楼层

$InstallDate = _DateAdd( 's',$InstallDate, "1970/01/01 08:00:00")

与cmd输入systeminfo查出来一致
发表于 2009-9-16 11:27:26 | 显示全部楼层
好东西,学习了。
发表于 2010-1-8 10:26:12 | 显示全部楼层
不错,学习了,收藏备用
发表于 2010-1-12 14:18:37 | 显示全部楼层
学习 啦 谢谢 以上的能人
发表于 2010-8-13 01:49:34 | 显示全部楼层
谢谢提供,又学到了,呵呵
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 10:31 , Processed in 0.075733 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表