Hi all, It took a while but I found the solution. Here's the code, perhaps it's useful to someone else. Many thanks for the suggestions.
Jan function RegistryBinaryToDateTime (const Registry: TRegistry; const sKey, sValue: string): TDateTime; const SECS_IN_DAY = 86400; BILLS_CONSTANT = 10000000; type TbinData = array[0..7] of byte; function u64(binData: TbinData): uint64; var i: integer; m: uint64; begin Result := 0; m := 1; for i := Low(binData) to High(binData) do begin Result := m * binData[i] + Result; m := m * 256; end; end; var uDays, uSeconds: uint64; binData: TbinData; begin if not Assigned(Registry) then raise Exception.Create('Please open the registry before calling this function.'); with Registry do begin if OpenKey (sKey, False) then // Open the registry key begin ReadBinaryData(sValue, binData, 8); // Read value from the registry Result := EncodeDateTime(1601, 1, 1, 0, 0, 0, 0); // Set the epoch according to Bill uSeconds := u64(binData) div BILLS_CONSTANT; // Apply Bill's constant (no, don't ask) uDays := uSeconds div SECS_IN_DAY; // Calculate days uSeconds := uSeconds - (uDays * SECS_IN_DAY); // and seconds Result := IncDay (Result, uDays); // as (apparently??) we can't just do IncSecond Result := IncSecond (Result, uSeconds); // so first add the days, then the remainder of the seconds CloseKey; // Close the registry key end; end; end; _______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe