3

我正在使用RegNotifyChangeKeyValue API 来跟踪对我的注册表项的更改以及类似于该 MSDN 页面底部给出的 C++ 示例。我这样设置这个 API:

RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\Company\\Product", 0, KEY_NOTIFY, &hKey);
RegNotifyChangeKeyValue(hKey, FALSE, REG_NOTIFY_CHANGE_LAST_SET, hEvent, TRUE);

因此,比如说,当这个 API 将作为参数的事件发出信号时(这意味着对Software\Company\Product键的更改),有没有办法找出实际触发它的值?

4

1 回答 1

3

不。您需要在调用 RegNotifyChangeKeyValue 之后缓存当前的名称/值对,然后在收到信号时,您可以将最新的名称/值对与您的缓存进行比较,看看有什么不同,然后为下一个信号更新您的缓存。

如果您在调用 RegNotifyChangeKeyValue 之前构建缓存,并且在两个操作之间由某个线程进行了更新,那么您的缓存将不会反映实际状态,并且可能会导致下一次更新出现问题(取决于您的需要)。

在 RegNotifyChangeKeyValue 之后构建缓存可能会导致您的代码收到信号但无法知道所关注的值(如果更新是由两个操作之间的另一个线程进行的)。没什么大不了的:只是假装没有看到任何变化。

于 2013-11-10T12:04:21.957 回答