레지스트리 모니터링(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;

 

사용방법

// Proc : 명령어 입력

// WatchSub : 하위도 모니터링 할 것인가?

RegistryMonitor(RootKey, Key, Proc, WatchSub);

 

arrow