![]() |
AW: CMD mit Output
Holger,
es geht um InstallTime nicht InstallDate. InstallTime ist zu groß für Integer auch für Cardinal. Seht es euch an.. Willie. |
AW: CMD mit Output
Sorry, ich dachte die ganze Zeit, wir reden nur von InstallDate. Mein Win7 hat kein InstallTime in dem genannten Registry-Zweig. Vielleicht eine Neuerung von Win10? Anyway, InstallDate gibt's auch schon bei XP. Insofern ist dieser Wert der wahrscheinlich zuverlässigere.
Und, InstallDate enthält bereits das Datum und die Uhrzeit, eben weil's (sehr wahrscheinlich) ein Unix Timestamp ist. Grüße Dalai |
AW: CMD mit Output
Hmm..
Und unter meinem WIN8.1 (64Bit) gibt es auch nur 'InstallDate'... |
AW: CMD mit Output
Hmm..
So, mal ein bischen recherchiert... 'InstallTime' gibt es nur mit Windows10.. Es ist ein REG_QWORD, somit 64Bit Integer und enthält einen LDAP/FileTime TimeStamp. Dieser passt unter D6 in einen Int64. Ich musste meinem D6 erst das Lesen von REG_QWORD beibringen und konnte dann die Zahl mit FileTimeToDateTime in einen DateTime konvertieren.
Delphi-Quellcode:
uses
Registry, RTLConsts, DateUtils; const KEY_WOW64_64KEY = $0100; KEY_WOW64_32KEY = $0200; const REG_QWORD = 11; function FileTimeToDateTime(ft: TFileTime): TDateTime; overload; var tzi: TTimeZoneInformation; lt, st: TSystemTime; begin GetTimeZoneInformation(tzi); FileTimeToSystemTime(ft, st); SystemTimeToTzSpecificLocalTime(@tzi, st, lt); Result := SystemTimeToDateTime(lt); end; function FileTimeToDateTime(ft_Int: Int64): TDateTime; overload; var ft: TFileTime; begin Int64(ft) := ft_Int; Result := FileTimeToDateTime(ft); end; type TRegistryEx = class(TRegistry) public function ReadInt64(const Name: String): Int64; procedure WriteInt64(const Name: String; Value: Int64); end; { TRegistryEx } function TRegistryEx.ReadInt64(const Name: String): Int64; var dwType: DWORD; dwSize: DWORD; begin dwType:=REG_NONE; dwSize:=SizeOf(Int64); if (RegQueryValueEx(CurrentKey, PChar(Name), nil, @dwType, PByte(@result), @dwSize) <> ERROR_SUCCESS) then raise ERegistryException.CreateResFmt(@SRegGetDataFailed, [Name]); if (dwType <> REG_QWORD) then raise ERegistryException.CreateResFmt(@SInvalidRegType, [Name]); end; procedure TRegistryEx.WriteInt64(const Name: String; Value: Int64); var dwType: DWORD; dwSize: DWORD; begin dwType:=REG_QWORD; dwSize:=SizeOf(Int64); if (RegSetValueEx(CurrentKey, PChar(Name), 0, dwType, @Value, dwSize) <> ERROR_SUCCESS) then raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [Name]); end; { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var Reg: TRegistryEx; tmpInstallDate : Cardinal; tmpInstallTime : Int64; begin tmpInstallDate := 0; tmpInstallTime := 0; Reg := TRegistryEx.Create(KEY_WOW64_64KEY or KEY_ALL_ACCESS); try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\Software\Microsoft\Windows NT\CurrentVersion', False) then begin tmpInstallDate := Reg.ReadInteger('InstallDate'); if Reg.ValueExists('InstallTime') then tmpInstallTime := Reg.ReadInt64('InstallTime'); Reg.CloseKey; end; finally Reg.Free; end; Edit1.Text := DateTimeToStr(UnixToDateTime(tmpInstallDate)); Edit2.Text := DateTimeToStr(FileTimeToDateTime(tmpInstallTime)); end; Der Source für TRegistryEx stammt von hier: ![]() Den Link zum FileTimeToDateTime mit Int64 habe ich leider verdaddelt... |
AW: CMD mit Output
Zitat:
![]() Damit kann man alle noch offiziell unterstützen Win-Versionen zum Testen von *räusper* IE-Funktionalitäten *Zwinker* herunterladen. Sherlock |
AW: CMD mit Output
Hallo Holger, Leverkuseen City, da bin ich gestern gewesen.
Ganze Meine Code, werde es checken. Ich habe das auslesen so gemacht: (es klappt)
Delphi-Quellcode:
Dann wird mir deine Function weiter helfen. Es funktioniert!!!
procedure TForm1.Button5Click(Sender: TObject);
var Reg: TRegistry; Buf: array[0..7] of Byte; id: uint64; idt: TDateTime; begin FillChar(Buf, SizeOf(Buf),0); Reg:=TRegistry.Create(KEY_WOW64_64KEY); Reg.RootKey:=HKEY_LOCAL_MACHINE; if Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion') then begin Reg.ReadBinaryData('InstallTime',Buf,SizeOf(Buf)); // id:=$1d3ea9f6e412ca2; so steht's in der Registry Move(Buf,id,SizeOf(id)); // ab hier komme ich nicht weiter! Reg.CloseKey; end; Reg.Free end; Sherlock, Danke für den Tipp. Ich werde "Ratiopharm" nicht befragen müssen. Einen Freund kann ich nerven und mein Bruder ist manches von mir gewöhnt. Gruß Willie. |
AW: CMD mit Output
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, jetzt zum letzten Mal dieses Thema!:!:
Das Installationsdatum aislesen klappt jetzt, sowohl mit InstallDate als auch mit InstallTime. Nur mit der Zeitzone komme ich nicht klar Mit SystemInfo ermittelt ist Datum-Zeit 13.05.2018 10:47 . Ohne Anpassung ergibt es 09:47 mit der function hier aus dem Forum 11:47. Was ist jetzt richtig?
Delphi-Quellcode:
Willie.
function DateTimeToLocalTimeDT(dt: TDateTime): TDateTime;
var tzi: TTimeZoneInformation; lt, st: TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemtime(dt, st); SystemTimeToTzSpecificLocalTime(@tzi, st, lt); Result := SystemTimeToDateTime(lt); end; |
AW: CMD mit Output
11:47 - Sommerzeit
10:47 - Ortszeit 09:47 - Greenwich mean time (UTC) |
AW: CMD mit Output
Ach so!
Gestern kam durch Zufall das letzte Release-Update von Windows mit neuem Install-Datum, das stimmt. Ist klar, gestern war noch Normalzeit (Winter). Danke für eure Geduld Willie. |
AW: CMD mit Output
<OT>
Hat schon jemand einen Algorithmus für eine ausführliche ![]() Müsste ja sowas wie "von bis" und das jeweilige Einführungsdatum der verschiedenen Länder berücksichtigen. Bisher hat ja vielleicht auch einfach grob "Jahr >= 1980" gut funktioniert. Wenn angeblich die Sommerzeit demnächst in der EU abgeschafft wird sollte man eventuell jetzt schonmal darüber nachdenken, wie man fehlerfrei die "echte" Zeit fehlerfrei in den jeweiligen Zeitzonen berechnen kann. Ist zwar zum Glück nicht mein aktuelles Thema, könnte es aber vielleicht schnell mal werden. </OT> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz