this slowpoke moves

Monitoring Registry Key

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;
  err: DWORD;
begin
  Root := p.Root;
  Key := p.Key;

  err := WatchRegKey(Root, Key);
  if err <> 0 then
    MessageBox(0,
               PChar(SysErrorMessage(err)),
               'Error WatchRegkey, Registry Key not found',
               MB_ICONSTOP);

  Dispose(p);

  result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadID: Cardinal;
  ThreadParams: PThreadParams;
begin
  try
    New(ThreadParams);
    // Registry Root
    ThreadParams.Root := HKEY_CURRENT_USER;
    // Registry Schlüssel
    ThreadParams.Key := 'Software\mp\Test';
    // Thread Start
    CloseHandle(BeginThread(nil,
                            0,
                            @Thread,
                            ThreadParams,
                            0,
                            ThreadID));
    except
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate