Winapi 枚举子项中的所有值

Winapi 枚举子项中的所有值,winapi,api,registry,Winapi,Api,Registry,我的注册表中有一个子项的值未知 我想从指定子项中的那些值中获取所有数据 我该怎么做?我不知道值的名称和值的数量 我在用C语言编程 谢谢 您需要使用Win32 API枚举子项的注册表值。MSDN上有一个类似于此的命令,但用于枚举注册表子项 您还可以从我前面的一个答案中找到一些帮助函数。以下是从给定的regkey中获取所有字符串值的代码。您必须在使用此函数之前打开此键,然后在使用此函数之后关闭 vector<pair<wstring, wstring>> CRegistryM

我的注册表中有一个子项的值未知

我想从指定子项中的那些值中获取所有数据

我该怎么做?我不知道值的名称和值的数量

我在用C语言编程


谢谢

您需要使用Win32 API枚举子项的注册表值。MSDN上有一个类似于此的命令,但用于枚举注册表子项


您还可以从我前面的一个答案中找到一些帮助函数。

以下是从给定的regkey中获取所有字符串值的代码。您必须在使用此函数之前打开此键,然后在使用此函数之后关闭

vector<pair<wstring, wstring>> CRegistryManager::getKeyValues(HKEY regKey)
{
    vector<pair<wstring, wstring>> retValues;

    DWORD numOfValues;
    DWORD maxValueNameLen;
    DWORD maxValueDataLen;
    LONG retCode;

    retCode = RegQueryInfoKey(regKey, NULL, NULL,NULL, NULL, NULL, NULL, &numOfValues, &maxValueNameLen, &maxValueDataLen, NULL, NULL);
    if( (retCode == ERROR_SUCCESS) && (numOfValues != 0) )
    {
        TCHAR* valueName = new TCHAR[maxValueNameLen+1];

        TCHAR* valueData = new TCHAR[maxValueDataLen+1];

        for(int i = 0; i < numOfValues; i++)
        {
            DWORD valueNameBuferSize = maxValueNameLen+1;
            DWORD valueDataBufferSize = maxValueDataLen+1;

            retCode = RegEnumValue(regKey, i, valueName, &valueNameBuferSize, NULL,NULL, (LPBYTE)valueData, &valueDataBufferSize);
            if(retCode == ERROR_SUCCESS)
            {
                auto pair = make_pair(wstring(valueName), wstring(valueData));
                retValues.push_back(pair);
            }
        }
        delete[] valueName;
        delete[] valueData;
    }
    return retValues;
}