누구든지 프로그래밍 방식으로 레지스트리를 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를 호출합니다.