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

时间:2013-10-08 18:06:28

标签: c++ c winapi

是否有像RegDeleteTree这样的函数来删除特定注册表子键下的所有值?我不想删除Key,只是它的值。

如果没有,我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:2)

唯一的方法是使用RegEnumValue()枚举值,然后使用RegDeleteValue()分别删除它们。

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

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

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;
}