我正在开发一个包装类来监视特定注册值的更改。
我正在使用RegNotifyChangeKeyValue,所以每当regKey" Software \ Bla"内有任何值时更新后,会触发一个事件。
但我内部有多个值" Software \ Bla",那么如何监控单个值的变化而不是所有变量?
答案 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
。有关其他信息,请参阅下面的参考资料。