2014-02-09 52 views
0

我想通过强调我对C#相当新颖来作序。C#:找到一个不知道它在哪里的密钥

我试图让一个程序来发现,为了使用这种方法来禁用CPU核心停车编辑注册表值:Registry Edit

的问题是,我知道密钥的开始:

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 

如何找到使用注册表和Registrykey?我试着循环遍历所有的子键,我只是得到一个异常,因为我回来的时候是空的。

任何建议表示赞赏。

+0

你可以把你写下来的代码循环通过注册表? –

回答

0

您可以使用递归来查找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"); 

此功能通过递归主键中的所有子键搜索。如果你想搜索到特定的级别,那么你必须添加该逻辑的功能。

+0

这是完美的,正是我所期待的。它工作100%! – imthatguyhere

0

我想你忘了提及注册表键名称以适当的方式。这里是一段代码,它带出了输出:

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

请让我知道这是否工作。

相关问题