我想通过强调我对C#相当新的方式来为此做准备。
我正在尝试创建一个程序来查找和编辑注册表值,以便使用此方法禁用CPU核心停放:Registry Edit
问题在于我知道密钥的开头:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\PowerSettings\
但不是Next部分,但我知道之后的部分:
0cc5b647-c1df-4637-891a-dec35c318583
所以如果它看起来像这样:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\PowerSettings\<UNKNOWN>\0cc5b647-c1df-4637-891a-dec35c318583
如何找到使用Registry和Registrykey?我尝试循环遍历所有子键,我只是得到一个异常,因为我得到的所有都是null。
任何建议表示赞赏。
答案 0 :(得分:1)
我猜您忘记以适当的方式提及注册表项名称。以下是输出结果的代码:
class Program
{
static void Main(string[] args)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion");
foreach (var v in key.GetSubKeyNames())
{
RegistryKey key1 = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\" + v);
foreach ( var v1 in key1.GetSubKeyNames())
{
if (v1 == "{00EC8ABC-3C5A-40F8-A8CB-E7DCD5ABFA05}")
Console.WriteLine(key1);
}
}
}
}
如果有效,请告诉我。
答案 1 :(得分:1)
您可以使用递归来查找SubKey
。
private RegistryKey SearchSubKey(RegistryKey Key,String KeyName)
{
foreach (String subKey in Key.GetSubKeyNames())
{
RegistryKey key1 = Key.OpenSubKey( subKey);
if (subKey.ToUpper() == KeyName.ToUpper())
return key1;
else
{
RegistryKey mReturn = SearchSubKey(key1, KeyName);
if (mReturn != null)
return mReturn;
}
}
return null;
}
将此功能称为
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\ControlSet001\Control\Power\PowerSettings\");
RegistryKey SubKey = SearchSubKey(key, "0cc5b647-c1df-4637-891a-dec35c318583");
此功能以递归方式搜索主键中的所有子键。如果要搜索特定级别,则必须在函数中添加该逻辑。