利用Delphi监视注册表的变化

ZDNet软件频道 时间:2003-06-06 作者:张云潮 |  我要评论()
本文关键词:
本文介绍了一种利用SDK函数监视注册表变化的方法,并对该方法在线程中的处理以及何界面的交互做了详细地讨论。
问题的提出

我们在编写软件的时候,常常需要把一些信息保存到系统的注册表中。如果用户更改了注册表的信息,我们如何及时知道,并做相应的处理呢?通过研究,我们发现在Win98以上操作系统中,微软在SDK函数库中增加了RegNotifyChangeKeyValue函数,用于监视注册表特定键值的变化。下面我们就怎样用Delphi编一个注册表监视器,做详细地探讨。

关于注册表监视函数

下面是注册表监视函数地声明:

function RegNotifyChangeKeyValue(

    hKey : HKEY,             // 需要监视地注册表键

    bWatchSubtree : LongBool,  // 是否监视其子键

    dwNotifyFilter : Cardinal,   //  监视键变化的类型  

    hEvent : Cardinal,               // 当有变化时所触发的通知事件句柄

    fAsynchronous : LongBool  // 异步通知事件标志

   ) : integer;

根据MSDN中对该函数的描述,我们对其参数做一下描述:

hKey --我们所要监视的目标键值句柄,它必须是已经被打开的。要打开一个注册表键可以利用Tregistry 中的OpenKeyReadOnly函数。

dwNotifyFilter ――是一组标志集合,用于标识我们需要监视的变化类型,它们包括: 

REG_NOTIFY_CHANGE_NAME – 增加或删除了子键

  REG_NOTIFY_CHANGE_ATTRIBUTES – 改变了键的属性

  REG_NOTIFY_CHANGE_LAST_SET – 键值发生了改变

  REG_NOTIFY_CHANGE_SECURITY -键的安全属性发生了改变

hEvent ――当有变化时所触发的通知事件句柄。我们可以利用SDK函数CreateEvent来创建一个事件。

fAsynchronous ――以异步方式触发事件标志。

现在我们已经对如何利用该函数有了大体的了解:

1.打开需要监视的注册表键

2.创建触发事件

3.调用注册表监视函数,等待事件触发。

如果等待事件触发在主界面中实现,就会造成界面堵塞。一个解决办法就是,等待事件触发在线程中实现。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134