1

我想先强调一下我对 C# 还很陌生。

我正在尝试制作一个程序来查找和编辑注册表值,以便使用此方法禁用 CPU 核心停放:注册表编辑

问题是我知道钥匙的开始:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\PowerSettings\

但不是下一部分,但我知道之后的部分:

0cc5b647-c1df-4637-891a-dec35c318583

所以如果它看起来像这样:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\PowerSettings\<UNKNOWN>\0cc5b647-c1df-4637-891a-dec35c318583

如何找到使用注册表和注册表项?我尝试遍历所有子键,但我得到了一个异常,因为我得到的都是空的。

任何建议表示赞赏。

4

2 回答 2

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

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

于 2014-02-09T06:09:33.693 回答
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);
            }
        }
    }
}

请让我知道这是否有效。

于 2014-02-09T05:17:14.990 回答