Собственно вопрос мой звучит также как и название темы как же средствами делфи узнать дату установки виндовс или сколько дней она уже в работе?
Решение:
1)
В Реестре Windows (см. Что такое Реестр Windows?) дата установки операционной системы хранится в шестнадцатеричном виде в разделе
[HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion] в REG_DWORD-параметре InstallDate, например, 45e19ed9 (1172414169), в скобках указано десятичное число.
Параметр InstallDate показывает количество секунд, прошедших с 1 января 1970 г. до момента установки операционной системы.
cmd -> systeminfo>temp.tmp дальше парсить temp.tmp
2) из библиотеки Abbrevia, модуль AbUtils.pas
{ date and time stuff }
const
Date1900 {: LongInt} = $0001AC05; {Julian day count for 01/01/1900 -- TDateTime Start Date}
Date1970 {: LongInt} = $00020FE4; {Julian day count for 01/01/1970 -- Unix Start Date}
Unix0Date: TDateTime = 25568; {Date1970 - Date1900}
SecondsInDay = 86400; {Number of seconds in a day}
SecondsInHour = 3600; {Number of seconds in an hour}
SecondsInMinute = 60; {Number of seconds in a minute}
HoursInDay = 24; {Number of hours in a day}
MinutesInHour = 60; {Number of minutes in an hour}
MinutesInDay = 1440; {Number of minutes in a day}
function AbUnixTimeToDateTime(UnixTime : LongInt) : TDateTime;
function AbDateTimeToUnixTime(DateTime : TDateTime) : LongInt;
function AbUnixTimeToDateTime(UnixTime : LongInt) : TDateTime;
{ convert unix date to Delphi TDateTime }
var
Hrs, Mins, Secs : Word;
TodaysSecs : LongInt;
begin
TodaysSecs := UnixTime mod SecondsInDay;
Hrs := TodaysSecs div SecondsInHour;
TodaysSecs := TodaysSecs - (Hrs * SecondsInHour);
Mins := TodaysSecs div SecondsInMinute;
Secs := TodaysSecs - (Mins * SecondsInMinute);
Result := Unix0Date + (UnixTime div SecondsInDay) +
EncodeTime(Hrs, Mins, Secs, 0);
end;
{ -------------------------------------------------------------------------- }
function AbDateTimeToUnixTime(DateTime : TDateTime) : LongInt;
{ convert Delphi TDateTime to unix date }
var
Hrs, Mins, Secs, MSecs : Word;
Dt, Tm : TDateTime;
begin
Dt := Trunc(DateTime);
Tm := DateTime - Dt;
if Dt < Unix0Date then
Result := 0
else
Result := Trunc(Dt - Unix0Date) * SecondsInDay;
DecodeTime(Tm, Hrs, Mins, Secs, MSecs);
Result := Result + (Hrs * SecondsInHour) + (Mins * SecondsInMinute) + Secs;
end;