HKEY_CURRENT_USER
の特定のRegistryKeyが変更されたときに通知が必要です。これまでのところ、私はこれを試しましWMI
たが成功しませんでした:
var query = new WqlEventQuery(string.Format(
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='{0}' AND KeyPath='{1}' AND ValueName='{2}'",
hive, keyPath.Replace("\\","\\\\"), valueName));
_watcher = new ManagementEventWatcher(query);
_watcher.Scope.Path.NamespacePath = @"root\default";
_watcher.EventArrived += (sender, args) => KeyValueChanged();
_watcher.Start();
(エラーは「見つかりません」でした)
2番目のアプローチは、例をhttp://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspxからc#WBEM Scripting COM component
に移植することを目的としてを使用することでしたが、 c#のWBEM COM
このhttp://www.codeproject.com/KB/system/registrymonitor.aspxクラスを見つけましたが、このクラスはキー全体を監視するだけであり、特定の値(指定された場合)の場合にのみ通知が必要なため、ニーズに適合しませんでしたValueName
上記のサンプルのを介して)が変更されます。
編集:HKEY_CURRENT_USER
msdn vbscriptの例でハイブをに変更すると、動作を停止します。この動作については何も見つかりませんでしたが、2003年からのリンクです
EDIT2:HKEY_CLASSES_ROOT
およびハイブへの変更は、またはそれから派生したクラス(など)HKEY_CURRENT_USER
ではサポートされていません。(MSDN)RegistryEvent
RegistryValueChangeEvent