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 呼び出しの前にキャッシュを構築し、2 つの操作の間に何らかのスレッドによって更新が行われた場合、キャッシュは実際の状態を反映せず、次の更新で問題が発生する可能性があります (必要に応じて)。

RegNotifyChangeKeyValue の後にキャッシュを構築すると、コードにシグナルが送信される可能性がありますが、関連する値を知ることができません (2 つの操作の間に別のスレッドによって更新が行われた場合)。大したことではありません。変化が見られないふりをするだけです。

于 2013-11-10T12:04:21.957 に答える