在c#中触发RegNotifyChangeKeyValue时,获取哪个注册表值已更改

时间:2016-10-25 03:06:42

标签: c# winapi registry

我正在开发一个包装类来监视特定注册值的更改。

我正在使用RegNotifyChangeKeyValue,所以每当regKey" Software \ Bla"内有任何值时更新后,会触发一个事件。

但我内部有多个值" Software \ Bla",那么如何监控单个值的变化而不是所有变量?

2 个答案:

答案 0 :(得分:2)

这是你需要做的, 步骤1: 打开注册表位置:

RegOpenKeyEx(registryHive,registrySubName,0,STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_NOTIFY,out registryKey);

第2步: 查询注册值

RegQueryValueEx(registryKey,registryValueName,0,ref type,pResult,ref size);

第3步: 缓存当前值.. cachedValue = Marshal.PtrToStringAnsi(pResult);

第4步: 将旧值与新值进行比较后触发注册表更改事件。

if

答案 1 :(得分:1)

RegNotifyChangeKeyValue不允许这样做。对于满足其filter参数的任何键/子树更改,它将返回(或触发事件,如果您异步使用它)。您可以重新读取所有值以查看确切更改的内容,或使用WMI注册表监视器而不是RegNotifyChangeKeyValue。有关其他信息,请参阅下面的参考资料。

1. MSDN - Registry class

2. C# registry watcher

3. MSDN - Receiving WMI Event

4. CSMonitorRegistryChange sample code