119电脑网

当前位置: 主页 > Delphi >

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

时间:2013-09-18 01:12来源: 作者: 点击:
delphi自带的TRegistry类只能实现注册表的基本操作,如果我们要实时监视注册表的变化或者扫描注册表特定项下的所有子项,TRegistry类就无能为力了。我啃了半天SDK。
  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



拓展阅读:总结:注册表综合应用100例

这是因为有些图标必须通过修改注册表其它子键才得以实现。1 修改窗口滚动条的大小(Windows 9x/2000/XP)(1)打开注册表编辑器。(2)打开HKEY_CURRENT_USER\Control Panel\Desktop\Windows Metrics子键。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
推荐内容