有谁知道我如何编程地将注册表从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。