Mega Code Archive

 
Categories / Delphi / System
 

Enumerate the registry keys modified in a given time range

Title: enumerate the registry keys modified in a given time range? 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 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.