我使用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
键的更改)是否有任何方法可以找出实际触发它的值?
答案 0 :(得分:3)
没有。您需要在调用RegNotifyChangeKeyValue之后缓存当前的名称/值对,然后在发出信号时,您可以将最新的名称/值对与缓存进行比较以查看不同的内容,然后更新缓存以获取下一个信号。
如果在RegNotifyChangeKeyValue调用之前构建缓存,并且两个操作之间的某个线程进行了更新,则缓存将不会反映实际状态,并且可能导致下次更新出现问题(取决于您的需要)
在RegNotifyChangeKeyValue之后构建缓存可能会导致代码被发出信号但无法知道涉及的值(如果更新是由两个操作之间的另一个线程进行的)。没什么大不了的:只是假装没有做出任何改变。