Hallo Marcel,
probiere mal folgendes : (wie immer alles ohne Gewähr)
Delphi-Quellcode:
If isWinNT Then
regKey:= 'SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION';
If isWIN9x Then
regKey:= 'SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION';
Reg:= TRegistry.Create;
Reg.RootKey:= HKEY_LOCAL_MACHINE;
If Reg.OpenKeyReadOnly( regKey ) Then
Begin
If isWINNT Then regBuf:= 'InstallDate'
Else
If isWIN9x Then regBuf:= 'FirstInstallDateTime'
Else regKey:= '';
If (regKey <> '') Then
Begin
If reg.ValueExists(regBuf) Then
Begin
dType:= reg.GetDataType(regBuf);
Case dType Of
rdInteger : Begin
If isWINNT Then Result.InstallDate:= ctime2datetime( reg.ReadInteger(regBuf) );
If isWin9x Then Result.InstallDate:= FormatDateTime('dd.mm.yyyy', FileDateToDateTime(reg.ReadInteger('FirstInstallDateTime')));
End;
rdBinary : Begin
reg.ReadBinaryData( regBuf, wBuf, SizeOf(wBuf) );
If isWINNT Then Result.InstallDate:= ctime2datetime( wBuf );
If isWin9x Then Result.InstallDate:= FormatDateTime('dd.mm.yyyy', FileDateToDateTime(wBuf));
End;
End;
End;
End;
End;
Mit dem isWinNT und dem isWin9x, prüfe ich ab um welches Betriebsystem es sich handelt. Dieses musst Du natürlich durch deine Abprüfung ersetzen.
Dazu brauchst Du natürlich noch diese Funktion :
Delphi-Quellcode:
function ctime2datetime(givenTime: Double): string;
var DateTime: TDateTime;
TimeZoneInformation: TTimeZoneInformation;
begin
GetTimeZoneInformation(TimeZoneInformation);
DateTime:= EncodeDate( 1970, 1, 1 )+(givenTime/86400)-((TimeZoneInformation.Bias+TimeZoneInformation.daylightBias)/1440);
Result:= FormatDateTime('dd.mm.yyyy', DateTime);
end;
Diese Variante funktioniert unter
W2k, W2k3 und Vista.