注册表值有很多类型REG_SZ,REG_EXPAND_SZ,REG_BINARY,REG_DWORD,...
我可以通过函数RegQueryMultipleValues获取注册表值数据(数据类型为DWORD_PTR),但是依赖于每个注册表值类型,我必须找到一种方法来转换值来输出它。我一直在考虑决定在问题中使用输出这个词,以明确我有值 - 但很难输出它。
例如,我有以下代码
这里我得到一个注册表值列表
nErrorCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\VIDEO"), 0, KEY_READ, &hOpenKey);
PVALENT val_list;//List registry data
DWORD num_vals; //The length of val_list
LPTSTR lpValueBuf;//the buffer receives the data for each value
DWORD ldwTotsize;//the size of the buffer pointed to by the lpValueBuf parameter
//Some code to assign these value above...
//Now get the values of the list registry
RegQueryMultipleValues(hOpenKey, val_list, num_vals, lpValueBuf, &ldwTotsize);
现在我尝试使用婴儿步骤输出这些值
VALENT crtReg;
DWORD dwValue;
DWORD* pDwValue;
for (int i = 0; i < num_vals; i++)
{
crtReg = val_list[i];
switch (crtReg.ve_type)
{
case REG_DWORD:
/*This is ok*/
pDwValue = (DWORD*)crtReg.ve_valueptr;
dwValue = *pDwValue;
std::cout << "DWORD Key name: \n"
<< crtReg.ve_valuename
<< "\n value: "
<< dwValue
<< "\n len: "
<< crtReg.ve_valuelen;
std::cout << "\n===========\n";
break;
case REG_SZ:
/*This is ok*/
std::cout << "String Key name: \n"
<< crtReg.ve_valuename
<< "\n value: "
<< (TCHAR*)crtReg.ve_valueptr
<< "\n len: "
<< crtReg.ve_valuelen;
std::cout << "\n===========\n";
break;
case REG_BINARY:
/*Tricky...*/
std::cout << "Binary Key name: \n"
<< crtReg.ve_valuename
<< "\n value: (wait implement)"
<< "\n len: "
<< crtReg.ve_valuelen;
std::cout << "\n===========\n";
break;
default:
/*Really tricky...*/
std::cout << "Else Key name: \n"
<< crtReg.ve_valuename
<< "\n value: (wait implement)"
<< "\n len: "
<< crtReg.ve_valuelen;
std::cout << "\n===========\n";
break;
}
}
正如你在上面的代码中看到的,我切换case并为每种类型转换值,但是有些类型我不知道如何转换 - 比如二进制和其他(好的,我只知道如何施放DWORD和SZ类型)。如果有办法输出任何类型,请帮助我,即使将来有类似REG_ULTIMATE_3D的新类型(我认为MS提供了一个功能,但我搜索并找不到它 - 也许有但是我不够好找到它)。如果无法输出任何类型,请教我如何输出每种类型。