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”。
(注意:如果使用相同的参数,调用CWinApp
的DelRegTree
成员可能 也可以工作;但不能将\\SOFTWARE
部分添加到第一个参数 -必须包含在关键路径/名称中。)
【讨论】:
非常好,开箱即用!只是一个问题,这可以追溯到 WinXP 吗?我正在运行Win10。我记得读过一些东西,有些东西只能从 Vista 开始工作......我不太关心 XP、2K ......但我知道有些人仍在使用它......不管他们的原因是什么。谢谢! @Kittmaster 链接的文档页面显示:支持的最低客户端 Windows 2000 Professional、Windows XP [仅限桌面应用程序](我在一个仍在 Windows XP 上使用的应用程序中使用它。) 完美,这个解决方案非常简单优雅。接受的解决方案。 @Adrian > 谢谢!以上是关于MFC SetRegistryKey 功能相反?我错过了啥?的主要内容,如果未能解决你的问题,请参考以下文章
VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)