首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式移动注册表项

以编程方式移动注册表项
EN

Stack Overflow用户
提问于 2009-10-27 05:07:22
回答 2查看 1.8K关注 0票数 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返回了正确的密钥,但是当我为第一个密钥调用RegEnumValue时(即.KeyName1)返回所有5个值,而不仅仅是该键下的3个值。

希望这一切都有意义。我做错了什么吗?

谢谢你的帮助

下面是一个代码片段,如果有帮助的话:

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-27 06:06:26

查看所有的注册表函数,我发现了这个: SHCopyKey或者我可以使用这个: RegCopyTree for Vista或更高版本。

谢谢你的帮助。

票数 3
EN

Stack Overflow用户

发布于 2009-10-27 05:40:44

我不是这方面的专家,但可以试试这样的东西。

代码语言:javascript
运行
复制
  RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
  @"SOFTWARE\\" + csStartKey, 
  false);
Registry.CurrentUser.CreateSubKey
        (myKey.ToString());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1627348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档