Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Перечислить измененные ключи реестра в определенный диапазон времени

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

unit Main;

 interface

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

 type
   TFrmMain = class(TForm)
     Memo1: TMemo;
     btEnumReg: TButton;
     dtBeginDate: TDateTimePicker;
     dtEndDate: TDateTimePicker;
     dtBeginTime: TDateTimePicker;
     dtEndTime: TDateTimePicker;
     Panel1: TPanel;
     Label1: TLabel;
     Label2: TLabel;
     procedure btEnumRegClick(Sender: TObject);
   private
     { Private declarations }
     RegDate: TDateTime;
     RegKeyInfo: TRegKeyInfo;
     TimeZoneInfo: TTimeZoneInformation;
     function DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
     procedure FileTimeToDateTime(ft: TFileTime; var dt: TDateTime);
   public
     { Public declarations }

   end;

 var
   FrmMain: TFrmMain;

 implementation

 {$R *.dfm}

 function TFrmMain.DateTimeToLocalDateTime(DateTime: TDateTime): TDateTime;
 begin
   case GetTimeZoneInformation(TimeZoneInfo) of
     TIME_ZONE_ID_STANDARD:
       Result := DateTime - (TimeZoneInfo.Bias / 60 / 24);
     TIME_ZONE_ID_DAYLIGHT:
       Result := DateTime - ((TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias) / 60 / 24);
     else
       Result := 0;
   end;
 end;

 procedure TFrmMain.FileTimeToDateTime(ft: TFileTime; var dt: TDateTime);
 var
   SystemTime: TSystemTime;
   FileTime: TFileTime;
 begin
   if FileTimeToLocalFileTime(ft, FileTime) then
   begin
     FileTimeToSystemTime(ft, SystemTime);
     dt := SystemTimeToDateTime(SystemTime);
   end;
 end;

 procedure TFrmMain.btEnumRegClick(Sender: TObject);
 var
   Inizio, Fine: TDateTime;

   procedure EnumAllKeys(hkey: THandle; KeyName: string);
   var
     l: TStringList;
     n: Integer;
     KeyName_: string;
   begin
     KeyName_ := KeyName;
     with TRegistry.Create do
       try
         RootKey := hkey;
         OpenKey(EmptyStr, False);
         l := TStringList.Create;
         try
           GetKeynames(l);
           CloseKey;
           for n := 0 to l.Count - 1 do
           begin
             if OpenKey(l[n], False) then
             begin
               GetKeyInfo(RegKeyInfo);
               with RegKeyInfo do
               begin
                 FileTimeToDateTime(FileTime, RegDate);
                 RegDate := DateTimeToLocalDateTime(RegDate);
               end;
               if (RegDate <= Fine) and (RegDate >= Inizio) then
                 memo1.Lines.Add(DateTimeToStr(RegDate) + ' --- ' + KeyName_ + '\' + l[n]);
               EnumAllKeys(CurrentKey, KeyName_ + '\' + l[n]);
               CloseKey;
             end;
           end;
         finally
           l.Free
         end;
       finally
         Free;
       end;
   end;
 begin
   Memo1.Clear;
   Memo1.Lines.BeginUpdate;
   Inizio := int(dtBeginDate.DateTime) + frac(dtBeginTime.DateTime);
   Fine   := int(dtEndDate.Date) + frac(dtEndTime.DateTime);
   try
     EnumAllKeys(HKEY_CURRENT_USER, 'HKey_Current_User');
   finally
     Memo1.Lines.EndUpdate;
   end;

   MessageDlg('Enumeration ended', mtInformation, [mbOK], 0);
 end;

 end.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay