如何判断哪个值触发了RegNotifyChangeKeyValue?

时间:2013-11-10 09:54:09

标签: c++ windows winapi registry

我使用RegNotifyChangeKeyValue API跟踪对我的注册表项和C ++示例的更改,类似于该MSDN页面底部给出的更改。我这样设置了这个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键的更改)是否有任何方法可以找出实际触发它的值?

1 个答案:

答案 0 :(得分:3)

没有。您需要在调用RegNotifyChangeKeyValue之后缓存当前的名称/值对,然后在发出信号时,您可以将最新的名称/值对与缓存进行比较以查看不同的内容,然后更新缓存以获取下一个信号。

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

在RegNotifyChangeKeyValue之后构建缓存可能会导致代码被发出信号但无法知道涉及的值(如果更新是由两个操作之间的另一个线程进行的)。没什么大不了的:只是假装没有做出任何改变。