Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2012, 12:49   #1
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию узнать дату установки ОС на компьютере

Собственно вопрос мой звучит также как и название темы как же средствами делфи узнать дату установки виндовс или сколько дней она уже в работе?
megostudent вне форума Ответить с цитированием
Старый 04.07.2012, 13:07   #2
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
В Реестре 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
123123123123123
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 04.07.2012, 16:34   #3
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

Код:
procedure TForm1.btn1Click(Sender: TObject);
var
  ZoneName, tmp: string;
  UTC: Integer;
  InstallDate: DWORD;
  _date, _time: DWORD;
  t: TDateTime;
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_LOCAL_MACHINE;

   // Получение часового пояса
   if Reg.OpenKeyReadOnly( 'SYSTEM\CurrentControlSet\Control\TimeZoneInformation' ) then
   begin
      ZoneName := Reg.ReadString( 'TimeZoneKeyName' );
      Reg.CloseKey;
if Reg.OpenKeyReadOnly( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\' + ZoneName ) then
      begin
         tmp := Reg.ReadString( 'Display' );
         UTC := StrToInt( Copy( tmp, 5, 3 ) );
// Тут лучше использовать регулярное выражение
         Reg.CloseKey;
      end;
   end;
 
   // Определение даты установки Windows
   if Reg.OpenKeyReadOnly( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion' ) then
   begin
      InstallDate := Reg.ReadInteger( 'InstallDate' );
      _date := InstallDate div 86400;
      _time := InstallDate mod 86400;
      t := {дата} EncodeDate( 1970, 1, 1 ) + _date +
 {время} EncodeTime( _time div 3600 + UTC, ( _time div 60 ) mod 60, _time mod 60, 0 );
      ShowMessage( DateTimeToStr( t ) );
   end;



   Reg.CloseKey;
   Reg.Free;
end;

end.
но чтот не выводится меседж с датой
megostudent вне форума Ответить с цитированием
Старый 04.07.2012, 18:05   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

как-то так
Код:
InstallDate := Reg.ReadInteger( 'InstallDate' );
_date := InstallDate / 86400;
ShowMessage(DateToStr(IncDay(StrToDate('01.01.1970'),_date-1)));
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 04.07.2012, 21:21   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
узнать дату установки виндовс
У винды есть файлы ядра. Выясни их дату создания и считай это датой первоначальной инсталляции.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2012, 00:43   #6
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

Код:
 _date := InstallDate / 86400;
на этой строке ошибка.
megostudent вне форума Ответить с цитированием
Старый 05.07.2012, 07:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на этой строке ошибка.
Телепат? Ща погодь, телик включу, передавай ее телетекстом.
Цитата:
_date := InstallDate / 86400;
_date это тип целого числа. Нужен в качестве разделителя div
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2012, 08:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

из библиотеки 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;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2012, 13:10   #9
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Телепат? Ща погодь, телик включу, передавай ее телетекстом.
Не обязательно иметь телепатические способности, можно просто попробовать вставить код в делфи.
megostudent вне форума Ответить с цитированием
Старый 05.07.2012, 13:19   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от megostudent Посмотреть сообщение
Не обязательно иметь телепатические способности, можно просто попробовать вставить код в делфи.
Умничаем Нужно понимать, что для этого нужно иметь установленный Delphi соответствующей версии, запустить его, создать проект, вставить не понятно какой код, скомпилировать и т.д. Догадайтесь с трех раз - много ли найдется таких желающих?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать дату и версию Bios? Exitm Помощь студентам 14 05.05.2012 23:27
Как узнать дату создания файла на ftp Koder-KH Работа с сетью в Delphi 0 30.11.2011 18:11
Узнать дату по гринвичу через интернет art-programs Работа с сетью в Delphi 4 23.08.2011 23:12
Определить версию ОС, дату установки и последнего перезапуска Manonia Общие вопросы Delphi 4 22.03.2010 18:33
как узнать дату создания файла green-shrek Помощь студентам 5 25.02.2010 17:33