C#:在不知道密钥的位置找到密钥

时间:2014-02-09 04:48:25

标签: c# registry registrykey

我想通过强调我对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。

任何建议表示赞赏。

2 个答案:

答案 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");

此功能以递归方式搜索主键中的所有子键。如果要搜索特定级别,则必须在函数中添加该逻辑。