【问题标题】:enum all values from a subkey枚举子键中的所有值
【发布时间】:2010-11-10 20:00:22
【问题描述】:

我的注册表中有一个子项,其中包含未知数量的值。

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

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

我正在用 C 编程。

谢谢!

【问题讨论】:

    标签: winapi api registry


    【解决方案1】:

    这是从给定的 regkey 中获取所有字符串值 a 的代码(您必须在使用此功能之前打开此键并在使用此功能后关闭。

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

    【讨论】:

      【解决方案2】:

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

      您还可以从我以前的答案之一here 中找到一些辅助函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 2020-09-16
        • 1970-01-01
        相关资源
        最近更新 更多