【发布时间】:2010-11-10 20:00:22
【问题描述】:
我的注册表中有一个子项,其中包含未知数量的值。
我想从指定子键中的那些值中获取所有数据。
我该怎么做?我不知道值的名称和值的数量。
我正在用 C 编程。
谢谢!
【问题讨论】:
我的注册表中有一个子项,其中包含未知数量的值。
我想从指定子键中的那些值中获取所有数据。
我该怎么做?我不知道值的名称和值的数量。
我正在用 C 编程。
谢谢!
【问题讨论】:
这是从给定的 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;
}
【讨论】:
您需要使用 Win32 API RegEnumValue 来枚举子项的注册表值。 MSDN 上有一个example,与此类似,但用于枚举注册表子项。
您还可以从我以前的答案之一here 中找到一些辅助函数。
【讨论】: