(Co-Admin)
Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
Turbo Delphi für Win32
|
Registryschlüssel überwachen
3. Mär 2006, 22:26
Luckie zeight mit dem Code hier wie es möglich ist, bestimmte Schlüssel in der Registry auf Änderungen zu überprüfen. Dies ermöglicht die API-Funktion RegNotifyChangeKeyValue.
Delphi-Quellcode:
type
TThreadParams = packed record
Root: HKEY;
Key: String[255];
end;
PThreadParams = ^TThreadParams;
function WatchRegKey(Root: HKEY; Key: String): DWORD;
var
err: DWORD;
hEvent: THandle;
hndlkey: HKEY;
begin
hEvent := CreateEvent(nil, False, False, nil);
if hEvent <> 0 then
begin
err := RegConnectRegistry(nil, Root, hndlkey);
if err = 0 then
begin
err := RegOpenKeyEx(hndlkey, PChar(Key), 0, KEY_NOTIFY, hndlkey);
if err = 0 then
begin
err := RegNotifyChangeKeyValue(hndlkey, False, REG_NOTIFY_CHANGE_LAST_SET, hEvent, True);
case WaitForSingleObject(hEvent, INFINITE) of
WAIT_OBJECT_0: ShowMessage('Kuckuck');
end;
end;
end;
end
else
err := GetLastError;
result := err;
end;
function Thread(p: PThreadParams): Integer;
var
Root: HKEY;
Key: String;
begin
Root := p.Root;
Key := p.Key;
WatchRegKey(Root, Key);
Dispose(p);
result := 0;
end;
Hier ein Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
ThreadID: Cardinal;
ThreadParams: PThreadParams;
begin
New(ThreadParams);
ThreadParams.Root := HKEY_CURRENT_USER;
ThreadParams.Key := 'Software\mp\Test';
CloseHandle(BeginThread(nil, 0, @Thread, ThreadParams, 0, ThreadID));
end;
Sobald ein Schlüssel verändert/angelegt/gelöscht wird, wird dies gemeldet ( hier mit "Kuckkuck )
|
|
Zitat
|