Странное поведение функции RegNotifyChangeKeyValue
От: Аноним  
Дата: 18.07.08 13:36
Оценка:
Какое-то странное поведение ф-и RegNotifyChangeKeyValue. Код приведен ниже. Если нажимаем кнопку Button1 один раз, а потом нажимаем кнопку Button2, то программа сигнализирует 1 раз. Если нажимаем кнопку Button1 два раза, то программа потом сигнализирует 2 раза. Но если нажимаем кнопку Button1 три и больше раз, то программа каждый раз будет сигнализировать 2 раза. Никак не могу понять, почему именно 2 раза? Не один и не столько раз, сколько нажали кнопку Button1.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Registry, StdCtrls,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    hEvent: THandle;
    Registry1, Registry2: TRegistry;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  hEvent := CreateEvent(nil, True, False, nil);

  Registry1 := TRegistry.Create;
  with Registry1 do begin
    OpenKey('\Software\Test\Events', True);
    RegNotifyChangeKeyValue(Registry1.CurrentKey, True, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET, hEvent, True);
  end;
  Registry2 := TRegistry.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Registry2 do begin
    OpenKey('\Software\Test\Events\'+IntToStr(GetTickCount()), True);
    CloseKey;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  while WaitForSingleObject(hEvent, 0)=WAIT_OBJECT_0 do begin
    ResetEvent(hEvent);
    with Panel1 do begin
      Color := clRed;
      Update;
      Sleep(500);
      Color := clBtnFace;
      Update;
      Sleep(200);
    end;  
    RegNotifyChangeKeyValue(Registry1.CurrentKey, True, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET, hEvent, True);
  end;
end;

end.
Re: Странное поведение функции RegNotifyChangeKeyValue
От: Аноним  
Дата: 18.07.08 21:55
Оценка:
Судя по приведённому коду нажатие на Button1 не влияет вообще ни на что.
Re[2]: Странное поведение функции RegNotifyChangeKeyValue
От: Vaarcom  
Дата: 19.07.08 09:17
Оценка:
Влияет
Каждый раз создает новый ключ в реестре. А RegNotifyChangeKeyValue остлеживает эти изменения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.