c++ - 删除注册表项下的所有值而不删除子项

标签 c++ c winapi

是否有类似RegDeleteTree 的函数来删除特定注册表子项下的所有值?我不想删除 key ,只是删除它的值。

如果没有,我该怎么做?

谢谢!

最佳答案

唯一的方法是使用 RegEnumValue() 枚举值并使用 RegDeleteValue() 单独删除它们。

或者如果 key 没有任何子 key ,只需递归删除整个 key ,然后重新创建父 key 。

编辑:这是一个基本例程,用于说明如何枚举和删除键中的值(它只有最少的错误检查)。

DWORD dwNumValues, dwValueNameLen;
if (RegQueryInfoKey(hKey, 0, 0, 0, 0, 0, 0,
    &dwNumValues, &dwValueNameLen, 0, 0, 0) == ERROR_SUCCESS)
{
    TCHAR* tchValName = new TCHAR[dwValueNameLen + 1];
    for (int i = dwNumValues - 1; i >= 0; --i)
    {
        DWORD dwLen = dwValueNameLen + 1;
        if (RegEnumValue(hKey, i, tchValName, &dwLen, 0, 0, 0, 0) == ERROR_SUCCESS)
            RegDeleteValue(hKey, tchValName);
    }
    delete[] tchValName;
}

关于c++ - 删除注册表项下的所有值而不删除子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255066/

相关文章:

c - 以微秒级精度接收 RAW 套接字数据包

windows - 如何让Windows根据文件关联打开一个外部文件?

winapi - 调用返回 ERROR_MORE_DATA 或 ERROR_INSUFFICIENT_BUFFER 的 Win32 API 函数的模式?

c++ - 在 constexpr 表达式中检查具有公共(public)初始序列的 union 的非事件成员

c++ - 直接从vim编译

C++:输出文件中ASCII字符频率计数结果时出现奇怪的数字

c - 不建议在 fork 时执行外部程序

c - C编程“胡扯”游戏

c++ - 带有 CWinThread 指针数组的 WaitForMultipleObjects

c++ - 自定义 QWIzard 中的按钮?