Delphi 5 - Odczyt daty instalacji systemu

0

Witam,

Posłusznie i zgodnie z FAQ przeszukałem Wujka Googla oraz archiwum tego forum i nie znalazłem na ten temat nic. Toteż zadaję pytanie. Czy ktoś zna sposób na odczytanie z "trzewiów" rejestru daty instalacji systemu?

Mam nawet skryt VBS, który to czyni, ale za diabła nie udało mi się przerobić tego kodu do Delphi, bo nie znam się na programowaniu skryptów VBS. Może komuś innemu się to uda. Oto ten kod:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems

     Wscript.Echo "System zainstalowano: " & objOperatingSystem.InstallDate
     
Next

Lub może ktoś zna zupełnie inny sposób na poznanie tej daty i godziny.

Pozdrowienia,
Trejder

0

Coś w ten deseń. Pisane z ręki, więc może być jakiś błąd, literówka.

//uses ComObj, ActiveX, UrlMon

var
    oBindObj        : IDispatch;
    oOperatingSystems,
    oOperatingSystem,
    oWMIService     : OleVariant;
    i,
    iValue          : longword;
    oEnum           : IEnumvariant;
    oCtx            : IBindCtx;
    oMk             : IMoniker;
    sFileObj        : widestring;
  begin
    sFileObj := 'winmgmts:\\.\root\cimv2';

    OleCheck(CreateBindCtx(0,oCtx));
    OleCheck(MkParseDisplayNameEx(oCtx,PWideChar(sFileObj),i,oMk));
    OleCheck(oMk.BindToObject(oCtx,nil,IUnknown,oBindObj));
    oWMIService := oBindObj;

    oOperatingSystems := oWMIService.ExecQuery('Select * from Win32_OperatingSystem');

    oEnum := IUnknown(oOperatingSystems._NewEnum) as IEnumVariant;
    while oEnum.Next(1,oOperatingSystem,iValue) = 0 do 
    begin
      TheList.Add(oOperatingSystem.InstallDate);
      oOperatingSystem := Unassigned;
    end;
  end;
0
AdamPL napisał(a)

Coś w ten deseń. Pisane z ręki, więc może być jakiś błąd, literówka.

Działa! :]

Kilka spraw:

  1. Chciałbym pisać "z palca" / z pamięci programy tego kalibru (ActiveX, Ole) i nie popełniać w nich błędów! Adam - jesteś b-o-g-i-e-m! :)

  2. Dlaczego enumeracja (pętla)? I u Ciebie i w oryginalnym skrypcie? Jeśli nawet ktoś będzie miał zainstalowane kilka systemów, to przecież z poziomu jednego nie będzie mógł sprawdzić daty instalacji innego systemu, ani w ogóle żadnego parametru związanego z nim. IMHO bootloader Windows jest tak skonstruowany, że na dyskach wielosystemowych, jeśli odpali się system A to jest on zupełnie ślepy na pozostałe systemy (windowsowe, o Linuksach już nie wspominając). A jeśli system jest tylko jeden, to co? Może mieć kilka dat instalacji? Więc - po co ta pętla?

  3. "Ubrałem" Twój kod w prosty programik. Udostępniam innym, bo może komuś przyda się kilka dodatkowych (ciekawych IMHO) funkcji, których używam w środku:
    http://rapidshare.de/files/39717162/system_installation_date.zip.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1