2014-02-09 53 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); 
      } 
     } 
    } 
} 

請讓我知道這是否工作。

相關問題