Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.11.2019, 18:06
Alex7 Alex7 вне форума
Прохожий
 
Регистрация: 18.09.2018
Сообщения: 41
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Прочитать дату установки Windows

Здравствуйте, подскажите пожалуйста как прочитать дату установки Windows в Delphi, пробую так:
Код:
procedure TForm1.Button2Click(Sender: TObject);
 var
   Reg: TRegistry;
   RegKey: DWORD;
   Key: string;
 begin
   Reg := TRegistry.Create;
   try
     Reg.RootKey := HKEY_LOCAL_MACHINE;
     Key := 'SOFTWARE\Microsoft\Windows NT\CurrentVersion';
     if Reg.OpenKeyReadOnly(Key) then
     begin
       if Reg.ValueExists('InstallDate') then
       begin
         RegKey := Reg.ReadInteger('InstallDate');
         Reg.CloseKey;
         ShowMessage(IntToStr(RegKey));
       end;
     end;
   finally
     Reg.Free
   end;
 end;
Но вижу "0"

И ещё, как записать другую дату в реестр.

Прошу прощения в Windows 32 bit работает.
Как сделать чтобы работало в Windows 64 bit ?

Последний раз редактировалось Alex7, 19.11.2019 в 22:07.
Ответить с цитированием
  #2  
Старый 21.11.2019, 14:03
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 746
Репутация: 1293
По умолчанию

Попробуйте данный код:
Код:
function GetWindowsInstallDateTime: TDateTime; 
const 
RegKeyNT = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion'; 
RegValNT = 'InstallDate'; 
RegKey95 = 'SOFTWARE\Microsoft\Windows\CurrentVersion'; 
RegVal95 = 'FirstInstallDateTime'; 
function RegReadDWORD(const Key, Name: string): DWORD; 
begin 
Result := 0; 
with TRegistry.Create do 
try 
RootKey := HKEY_LOCAL_MACHINE; 
if KeyExists(Key) and OpenKeyReadOnly(Key) and ValueExists(Name) and 
(GetDataType(Name) in [rdInteger, rdBinary, rdUnknown]) and 
(GetDataSize(Name) = SizeOf(Result)) then 
if GetDataType(Name) = rdInteger then 
Result := DWORD(ReadInteger(Name)) 
else 
ReadBinaryData(Name, Result, SizeOf(Result)); 
finally 
Free; 
end; 
end; 
var 
Value: DWORD; 
begin 
Value := RegReadDWORD(RegKeyNT, RegValNT); 
if Value <> 0 then 
Result := EncodeDate(1970, 1, 1) + (Value / SecsPerDay) 
else 
begin 
Value := RegReadDWORD(RegKey95, RegVal95); 
if Value <> 0 then 
Result := FileDateToDateTime(Value) 
else 
Result := 0.0; 
end; 
end; 
Ответить с цитированием
  #3  
Старый 22.11.2019, 14:59
Alex7 Alex7 вне форума
Прохожий
 
Регистрация: 18.09.2018
Сообщения: 41
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

читается не
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
а
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ Windows NT\CurrentVersion\InstallDate
Ответить с цитированием
  #4  
Старый 01.12.2019, 13:43
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 746
Репутация: 1293
По умолчанию

Тогда следует ввести проверку на разрядность Windows
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter