![]() |
Registryschlüssel überwachen
Ich überwache mit der API Funktion RegNotifyChangeKeyValue einen Registryschlüssel:
Delphi-Quellcode:
Nur ist es so, dass wenn der Event ausgelöst wurde, die Überwachung aufgehoben wird. Das Problem ist jetzt aber, dass der Schlüssel so lange überwacht werden soll, wie das Programm läuft. Hat da jemand eine Idee, wie ich das realisieren könnte? Ich habe da im Moment einen Blackout.
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; 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; |
Re: Registryschlüssel überwachen
Kannst du nicht in diesem Fall die Überwachung neu starten?
|
Re: Registryschlüssel überwachen
Bingo. Das war der entscheidende Anstoss, obwohl mir das irgendwie klar war. Dank dir.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz