Registry Monitoring (Delphi)


procedure RegistryMonitor(RootKey: HKEY; Key: string; Proc: TProc; WatchSub: boolean);
begin
TThread.CreateAnonymousThread(
procedure
var
Reg: TRegistry;
Event: cardinal;
begin
Reg := TRegistry.Create;
Reg.RootKey := RootKey;
if Reg.OpenKeyReadOnly(Key) then
begin
Event := CreateEvent(nil, False, False, nil);
if Event > 0 then
begin
while True do
begin
RegNotifyChangeKeyValue(Reg.CurrentKey, WatchSub, REG_NOTIFY_CHANGE_LAST_SET, Event, True);
if WaitForSingleObject(Event, INFINITE) = WAIT_OBJECT_0 then TThread.Synchronize(TThread.CurrentThread, procedure begin Proc end);
end;
end;
end;

Reg.Free;
end).Start;
end;

 

How to use

// Proc: command input

// WatchSub: will you also monitor the child?

RegistryMonitor(RootKey, Key, Proc, WatchSub);

 

arrow