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

MFC SetRegistryKey opposite function? What am I missing?

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

SetRegistryKey(_T("Trains"));

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

Computer\HKEY_CURRENT_USER\SOFTWARE\Trains

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

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

我在这里和 Google 上阅读了其他主题,似乎有多种方法可以做到这一点......我尝试过 DelRegTree 但收效甚微,我不清楚为什么这个过程是使用多个函数和递归来查找所有键,删除它们,然后删除根键非常麻烦。

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

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

可以使用SHDeleteKey() function。您可以使用 HKEY_CURRENT_USER 作为第一个参数,并在第二个参数中指定密钥路径(从那个):

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

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

(注意:调用 CWinAppDelRegTree 成员 可能 也可以,如果你使用相同的参数;但你不能添加\SOFTWARE 第一个参数的一部分 – 必须包含在密钥 path/name 中。)