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