2014-02-09 2 views
0

저는 C#을 처음 접하게되었습니다. 내가 발견하고이 방법을 사용하여 CPU 코어 파킹을 해제하기 위해 레지스트리 값을 편집 할 수있는 프로그램을 만들려고 노력하고있어C# : 어디 있는지 모른 채 키 찾기

:

: 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 

어떻게 레지스트리 및 레지스트리 키를 사용합니까? 난 모든 하위 키를 통해 반복 해봤는데, 내가 돌아 오는 것이 모두 널이기 때문에 예외가 생겼다.

의견을 보내 주시면 감사하겠습니다.

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

이 기능이 작동하는지 알려주십시오.

관련 문제