我需要从我的BHO读取/写入Windows注册表中的一些信息。在Windows Vista / 7上,我在HKEY_CURRENT_USER \ Software \ AppDataLow \ Software下创建了一个新密钥。即使在保护模式下,这也可以正常工作。
然而,它不适用于XP。我试图将注册表更改为HKEY_CURRENT_USER \ Software \ Classes \ Software或HKEY_CURRENT_USER \ Software,没有运气。
从BHO在Windows XP上使用的正确注册表项是什么?
IEGetWriteableHKCU在Windows XP上不存在,它首先添加到Windows Vista
答案 0 :(得分:4)
在Vista之前,您将不得不使用不同的方法......在安装BHO期间,您需要告诉Windows / IE您想从BHO写入哪些密钥...
有一个完整的API系列可以处理这个问题(根据MSDN从WinXP SP2和更高版本支持):
IERegisterWritableRegistryKey
在安装时使用IERegisterWritableRegistryValue
在安装时使用IERegCreateKeyEx
在运行时使用IERegSetValueEx
在运行时使用答案 1 :(得分:3)
IE 7,8,9,(桌面)10在“保护模式”下运行选项卡,将注册表写入限制为特殊的“可写”部分。您需要向IE询问指针。
<强>(C#)强>
// C# PInvoke declaration for needed IE method.
[DllImport("ieframe.dll")]
public static extern int IEGetWriteableHKCU(ref IntPtr phKey);
// ...
// somewhere inside other method:
IntPtr phKey = new IntPtr();
var answer = IEGetWriteableHKCU(ref phKey);
RegistryKey writeable_registry = RegistryKey.FromHandle(
new Microsoft.Win32.SafeHandles.SafeRegistryHandle(phKey, true)
);
RegistryKey registryKey = writeable_registry.OpenSubKey(RegistryPathString, true);
if (registryKey == null) {
registryKey = writeable_registry.CreateSubKey(RegistryPathString);
}
registryKey.SetValue("Mode", mode);
writeable_registry.Close();
请参阅:
关于保护模式: http://www.codeproject.com/Articles/18866/A-Developer-s-Survival-Guide-to-IE-Protected-Mode