MFC SetRegistryKey 相反函数?我错过了什么?

问题描述 投票:0回答:1

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

SetRegistryKey(_T("Trains"));

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

Computer\HKEY_CURRENT_USER\SOFTWARE\Trains

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

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

我在这里和谷歌上阅读了其他线程,似乎有多种方法可以做到这一点......我尝试过 DelRegTree 但收效甚微,我不清楚为什么这个过程对于多个函数来说如此麻烦并且递归找到所有键,删除它们,然后删除根键。

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

我已经尝试过

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

c++ visual-studio mfc visual-studio-2017 registry
1个回答
0
投票

您可以使用

SHDeleteKey()
功能。您可以使用
HKEY_CURRENT_USER
作为第一个参数,并在第二个参数中指定关键路径(从中):

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

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

(注意:如果您使用相同的参数,调用

DelRegTree
may
CWinApp 成员也可以工作;但是您不能将
\\SOFTWARE
部分添加到第一个参数 - 必须将其包含在关键路径/名称。)

© www.soinside.com 2019 - 2024. All rights reserved.