Delphi实现对注册表的监视和扫描计算机等级考试

文章作者 100test 发表时间 2010:01:01 09:36:25
来源 100Test.Com百考试题网


  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 //保存句柄
  )

相关文章


在Delphi中使用指针参数计算机等级考试
DELPHI中回调函数的使用计算机等级考试
Delphi版OpenGL样例代码导游计算机等级考试
DELPHI8操作符重载的例子计算机等级考试
Delphi实现对注册表的监视和扫描计算机等级考试
使用Delphi创建IIS虚拟目录计算机等级考试
计算机二级辅导:增强MIDAS的安全性计算机等级考试
获得远程或本地机器的网卡的MAC计算机等级考试
计算机二级辅导:区分保留字跟关键字计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛