2009-10-26 10 views
2

누구든지 프로그래밍 방식으로 레지스트리를 HKEY_LOCAL_MCAHINE에서 HKEY_CURRENT_USER로 이동할 수 있음을 알고 있습니까?프로그래밍 방식으로 레지스트리 키 이동

RegEnumKeyEx 및 RegEnumValue를 사용하는 재귀 함수를 작성했지만 RegEnumValue는 최상위 수준 키 아래에있는 모든 값을 반환합니다.

예를 들어, 키가 HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ KeyName1이고 그 아래에 3 개의 값이 있고 HKEY_LOCAL_MACHINE \ SOFTWARE \ MyApp \ KeyName2가 있고 그 값이 2 개인 경우입니다. RegEnumKeyEx 올바른 키를 반환하는 것처럼 보입니다. 그러나 첫 번째 키 (예 : KeyName1) RegEnumValue 호출 할 때 반환 된 모든 5 값 및 해당 키 아래에있는 3 가져옵니다.

모든 것이 의미가 있기를 바랍니다 ... 나는 잘못된 것을하고 있습니까? 도움이된다면 어떤 도움도 여기에

에 대한

덕분에, 코드 조각입니다 : 단순히 위의

void CArgusApp::RecurseSubKeys(CString csStartKey) 
{ 
    CQERegistry reg; 

    HRESULT hr = reg.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\" + csStartKey, KEY_QUERY_VALUE); 

    CStringArray csaDataNames; 
    reg.GetAllDataNames(csaDataNames); 
    for (int j = 0; j < csaDataNames.GetSize(); j++) 
    { 
     CString csValueName = csaDataNames.ElementAt(j); 
     TRACE(csStartKey + " - " + csValueName); 
    } 

    CStringArray csaKeys; 
    reg.GetAllSubKeys(csaKeys); 
    for (int i = 0; i < csaKeys.GetSize(); i++) 
    { 
     CString csKey = csaKeys.ElementAt(i); 
     this->RecurseSubKeys(csStartKey + "\\" + csKey); 
    } 

    reg.Close(); 
} 

즉 GetAllDataNames는 RegEnumValue를 호출하고 GetAllSubKeys은 RegEnumKeyEx를 호출합니다.

답변

3

모든 레지스트리 기능을 살펴보면, SHCopyKey 또는 이것을 사용할 수 있습니다 : Vista 이상에서는 RegCopyTree를 사용할 수 있습니다.

도움 주셔서 감사합니다.

0

저는 전문가는 아니지만 이렇게 해보십시오.

RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
    @"SOFTWARE\\" + csStartKey, 
    false); 
Registry.CurrentUser.CreateSubKey 
     (myKey.ToString()); 
관련 문제