MFC SetRegistryKey 功能相反?我错过了啥?

Posted

技术标签:

【中文标题】MFC SetRegistryKey 功能相反?我错过了啥?【英文标题】:MFC SetRegistryKey opposite function? What am I missing?MFC SetRegistryKey 功能相反?我错过了什么? 【发布时间】:2021-04-09 12:52:58 【问题描述】:

在我的应用中,默认的注册表项被创建为:

SetRegistryKey(_T("Trains"));

它像这样放置“根”键值:

Computer\HKEY_CURRENT_USER\SOFTWARE\Trains

我的应用程序将所有窗口信息和其他数据保存在 Trains 下的子项中。我有一个“重置”菜单项,当用户激活它时,我想删除那个“根”键及其下的所有子键。

如果我在注册表编辑器中,只需右键单击并删除......然后blamo,一切都消失了。

我在这里和 Google 上阅读了其他主题,似乎有多种方法可以做到这一点....函数和递归查找所有键,删除它们,然后删除根键。

https://docs.microsoft.com/en-us/cpp/mfc/reference/cwinapp-class?view=msvc-160#delregtree

我试过DelRegTree(\\HKEY_CURRENT_USER\\SOFTWARE, _T("Trains")); 但这不起作用。我应该如何处理这个看似简单的任务?

【问题讨论】:

【参考方案1】:

您可以使用SHDeleteKey() function。您可以将HKEY_CURRENT_USER 用于第一个参数,并在第二个参数中指定密钥路径(来自该路径):

#include <shlwapi.h>
LSTATUS status = SHDeleteKey(HKEY_CURRENT_USER, _T("SOFTWARE\\Trains"));

您需要在链接中包含“Shwlapi.lib”。

(注意:如果使用相同的参数,调用CWinAppDelRegTree 成员可能 也可以工作;但不能将\\SOFTWARE 部分添加到第一个参数 -必须包含在关键路径/名称中。)

【讨论】:

非常好,开箱即用!只是一个问题,这可以追溯到 WinXP 吗?我正在运行Win10。我记得读过一些东西,有些东西只能从 Vista 开始工作......我不太关心 XP、2K ......但我知道有些人仍在使用它......不管他们的原因是什么。谢谢! @Kittmaster 链接的文档页面显示:支持的最低客户端 Windows 2000 Professional、Windows XP [仅限桌面应用程序](我在一个仍在 Windows XP 上使用的应用程序中使用它。) 完美,这个解决方案非常简单优雅。接受的解决方案。 @Adrian > 谢谢!

以上是关于MFC SetRegistryKey 功能相反?我错过了啥?的主要内容,如果未能解决你的问题,请参考以下文章

VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

如何为 MFC 中的线程完成添加事件处理程序?

MFC SDI 访问 DOC 视图

存在哪些 Windows 注册表替代品来存储软件配置设置 [关闭]

Qt 选项卡小部件中的 MFC 控件

列表控件中的 MFC 对话框组合框