Delphi实现对注册表的监视和扫描

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  Delphi自带的TRegistry类只能实现注册表的基本操作,如果我们要实时监视注册表的变化或者扫描注册表特定项下的所有子项,TRegistry类就无能为力了。我啃了半天SDK,终于实现了Delphi对注册表的监视与扫描,不敢独享,拿来献给广大的Delphi爱好者。
  监视注册表相关项的改变要用到一个API:RegNotifyChangeKeyValue。
  LONG RegNotifyChangeKeyValue(
  HKEY hKey, // 要监视的一个项的句柄
  BOOL bWatchSubtree, // 是否监视此项的子键
  DWORD dwNotifyFilter, // 监视哪些变化
  HANDLE hEvent, // 接受注册表变化事件的事件对象句柄
  BOOL fAsynchronous// 注册表变化前报告还是注册表变化后才报告
  );
  注意上面的hEvent是接受注册表变化事件的事件对象句柄,我们要用API:CreateEvent来创建一个系统事件对象。
  HANDLE CreateEvent(
  LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构
  BOOL bManualReset, // 是否自动重置
  BOOL bInitialState, // 是否设置初始状态
  LPCTSTR lpName// 事件对象的名称
  );
  新建一个工程,添加一个ListBox,两个Button。
  //先写个监视注册表的例子
  //监视HKEY_CURRENT_USER//Software项下所有子键
  procedure TForm1.Button1Click(Sender: TObject);
  var
  hNotify : THandle;
  hKeyx : HKEY;
  dwRes : DWORD;
  begin
  hNotify := CreateEvent( nil, //不使用SECURITY_ATTRIBUTES结构
  FALSE, //不自动重置
  TRUE,//设置初始状态
  /’RegistryNotify/’ //事件对象的名称
  );
  if hNotify = 0 then
  begin
  Showmessage(/’CreateEvent failed./’);
  exit;
  end;
  if RegOpenKeyEx( HKEY_CURRENT_USER, //跟键
  /’Software/’, //子键
  0, //reserved
  KEY_NOTIFY, //监视用
  hKeyx //保存句柄
  ) <> ERROR_SUCCESS then
  begin
  CloseHandle( hNotify );
  Showmessage(/’RegOpenKeyEx failed./’);
  exit;
  end;
  if RegNotifyChangeKeyValue( hKeyx, //监视子键句柄
  TRUE, //监视此项的子键
  REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET,
  hNotify, //接受注册表变化事件的事件对象句柄
  TRUE //注册表变化前报告
  ) <> ERROR_SUCCESS then

上一页12345下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答