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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2014, 19:11   #1
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию Помогите получить дату установки OC

здравствуйте. уважаемые программисты.

пожалуйста помогите извлечь дату установки windows от хп до 8.1

прошарил тему http://www.programmersforum.ru/showthread.php?t=206793 не то!

не помогло!

слышал про WinExec('cmd /c chcp 1251 && systeminfo > C:\sysInfo.txt',1);

но у меня случай где будут претендовать все языки стран. так что по ключевому слову искать - не вариант!

слышал что информацию о дате установки Windows можно получить и из системного реестра. HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion и найди параметр типа REG_DWORD с именем InstallDate

но он зашифрованный в формате времени Unix (32битном значение, означающее количество секунд, прошедших с 1970-01-01 00:00:00 UTC)

Вообщем еще раз, уважаемые программисты. Помогите мне извлечь дату.
Изображения
Тип файла: jpg data.JPG (89.8 Кб, 37 просмотров)
AppData вне форума Ответить с цитированием
Старый 20.07.2014, 19:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как вариант:
Код:
var sr:TSearchRec;    st:TSystemTime;
begin
  FindFirst('c:\Windows\System32\kernel32.dll',faAnyFile,sr);
  FileTimeToSystemTime (sr.FindData.ftLastWriteTime,st);
  Caption:=DateToStr(SystemTimeToDateTime(st));
  FindClose(sr);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2014, 19:50   #3
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

Stilet, спасибо за внимание. но к сожалению данный код показывает совершенно другую дату 04.03.2014.
кто то мне врет? )))) либо systeminfi либо ваш код)
AppData вне форума Ответить с цитированием
Старый 20.07.2014, 20:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мой может врать... Я как пример предложил на основании того что ядро винды вроде как изменяться никак не должно с момента установки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2014, 20:19   #5
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

Stilet, даты прыгают) вот допустим, C:\Users\Имя пользователя который был создан при установке Windows - показывает в свойствах папки дату 28.06.2014

на 2 ПК проверил твой пример, и он показывает одну и ту же дату. 04.03.2014

Подскажите как еще можно проверить?!

Последний раз редактировалось AppData; 20.07.2014 в 20:31.
AppData вне форума Ответить с цитированием
Старый 20.07.2014, 20:38   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

А через реестр почему не устроило? Если там число это количество дней после 1 января 1970 года, то просто прибавь это число к указанной дате и переведи в строку, получишь дату установки.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 20.07.2014, 20:40   #7
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

саша40, можно вас попросить выложить пример. я копался в http://www.programmersforum.ru/showthread.php?t=206793 так и не понял. заранее спасибо

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ 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;
{ 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 DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
var
  ZoneInfo: TTimeZoneInformation;
begin
  case GetTimeZoneInformation(ZoneInfo) of
    TIME_ZONE_ID_STANDARD:
      Result := DateTime + (ZoneInfo.Bias / MinutesInDay);
    TIME_ZONE_ID_UNKNOWN, TIME_ZONE_ID_DAYLIGHT:
      Result := DateTime - ((ZoneInfo.Bias + ZoneInfo.DaylightBias) / MinutesInDay);
  else
    Raise Exception.Create('Error Convert DateTo Local DateTime ');
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  InstallDate: DWORD;
  t: TDateTime;
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_LOCAL_MACHINE;

   // ќпределение даты установки Windows
   if Reg.OpenKeyReadOnly( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion' ) then
   begin
      InstallDate := Reg.ReadInteger( 'InstallDate' );
      t := DateTimeToLocalDateTime( AbUnixTimeToDateTime( InstallDate ));
      ShowMessage( DateTimeToStr( t ) );
   end;

   Reg.CloseKey;
   Reg.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ZoneInfo: TTimeZoneInformation;
begin
  GetTimeZoneInformation(ZoneInfo);
  with Memo1.Lines do
  begin
    Add('Bias: '+ IntToStr(ZoneInfo.Bias));
    Add('StandardName: '+ZoneInfo.StandardName);
    Add('StandardBias: '+IntToStr(ZoneInfo.StandardBias));
    Add('DaylightName: '+ZoneInfo.DaylightName);
    Add('DaylightBias: '+IntToStr(ZoneInfo.DaylightBias));
  end;
end;

end.
результат: 31.12.1969 5:00:00 - неверно
Изображения
Тип файла: jpg Снимок.JPG (36.0 Кб, 35 просмотров)

Последний раз редактировалось AppData; 20.07.2014 в 20:49.
AppData вне форума Ответить с цитированием
Старый 20.07.2014, 21:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подскажите как еще можно проверить?!
Код:
uses       registry, dateutils, 
...
begin
  with TRegistry.Create() do begin
    RootKey:=HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows NT\CurrentVersion') then begin
      Caption:=DateToStr(UnixToDateTime(ReadInteger('InstallDate')));
    end;
    Free;
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2014, 22:11   #9
AppData
Форумчанин
 
Регистрация: 20.09.2013
Сообщений: 246
По умолчанию

Stilet, спасибо что активно помогаете мне. но увы. см скрин
Изображения
Тип файла: jpg Снимок.JPG (34.4 Кб, 122 просмотров)
AppData вне форума Ответить с цитированием
Старый 20.07.2014, 22:28   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну тогда соболезную. Можешь еще попробовать WMI, но придется учитывать две вещи:
1) Доступность WMI на компе
2) Найти класс, который покажет инфу

Есть еще способ: Получить результат systeminfo и провести его разбор.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать дату установки ОС на компьютере megostudent Общие вопросы Delphi 20 30.11.2015 19:21
Получить дату вчера на пхп Lokos PHP 3 15.08.2013 10:04
Получить выбранную дату Vladya Помощь студентам 9 09.02.2013 09:34
Получить дату из строки. KiRx Microsoft Office Excel 3 19.06.2010 19:53
Определить версию ОС, дату установки и последнего перезапуска Manonia Общие вопросы Delphi 4 22.03.2010 18:33