是RegEnumValue的,是枚举很多一样结构的键值。 MSDN上这样说: Registry value names are limited to 32767 bytes. The ANSI version of this function treats this param as a USHORT value. Therefore, if you specify a value greater than 32767 bytes, there is an overflow and the function may return ERROR_MORE_DATA.TCHAR Value[255]; DWORD dwSize=255; DWORD dIndex=0; DWORD dwType=0; while(RegEnumValue(hkey,dIndex,Value,&dwSize,NULL,&dwType,NULL,NULL)==ERROR_SUCCESS) { static int line = 0; if(dwType == REG_BINARY) { line++; } dwSize=255;//注释1 dIndex++; }我要读取的reg_binary值有1500字节,那么unicode程序中应该怎样定义regenumvalue最后两个参数?另外,每次循环中,第7个参数lpcbData 是不是也要像第四个参数lpcchValueName (注释1)一样重新赋予初值?
只能全读出来,全读出来也没有多大开销。
MSDN上这样说:
Registry value names are limited to 32767 bytes. The ANSI version of this function treats this param as a USHORT value. Therefore, if you specify a value greater than 32767 bytes, there is an overflow and the function may return ERROR_MORE_DATA.TCHAR Value[255];
DWORD dwSize=255;
DWORD dIndex=0;
DWORD dwType=0; while(RegEnumValue(hkey,dIndex,Value,&dwSize,NULL,&dwType,NULL,NULL)==ERROR_SUCCESS)
{
static int line = 0;
if(dwType == REG_BINARY)
{
line++;
}
dwSize=255;//注释1
dIndex++;
}我要读取的reg_binary值有1500字节,那么unicode程序中应该怎样定义regenumvalue最后两个参数?另外,每次循环中,第7个参数lpcbData 是不是也要像第四个参数lpcchValueName (注释1)一样重新赋予初值?
我帮你看看哈。
也向你请教一下,怎样才能保持代码里的TAB缩进呢?
你是指复制代码到发帖框子的缩进吗?使用"插入源代码"功能就可以保持了.
TCHAR ValueName[255];
DWORD dwValueNameSize=255;
DWORD dwIndex=0;
DWORD dwType=0;
BYTE * pData;
DWORD dwDataSize = 0; while(ERROR_SUCCESS == RegEnumValue(hkey,dwIndex,
ValueName,&dwValueNameSize,NULL,&dwType,NULL,&dwDataSize)) // 查询值的类型和数据字节数
{
static int line = 0;
if(dwType == REG_BINARY)
{
line++;
pData = new BYTE[dwDataSize];
LONG lResult = RegQueryValueEx(hKey,ValueName,NULL,&dwType,pData,&dwDataSize);
if(ERROR_SUCCESS == lResult)
{
// 取你要的数据
}
delete [] pData;
dwDataSize = 0;
}
dwValueNameSize=255;//注释1
dwIndex++;
}
TCHAR ValueName[255];
DWORD dwValueNameSize=255;
DWORD dwIndex=0;
DWORD dwType=0;
BYTE * pData;
DWORD dwDataSize = 0; while(ERROR_SUCCESS == RegEnumValue(hkey,dwIndex,
ValueName,&dwValueNameSize,NULL,&dwType,NULL,&dwDataSize)) // 查询值的类型和数据字节数
{
static int line = 0;
if(dwType == REG_BINARY)
{
line++;
pData = new BYTE[dwDataSize];
LONG lResult = RegQueryValueEx(hKey,ValueName,NULL,&dwType,pData,&dwDataSize);
if(ERROR_SUCCESS == lResult)
{
// 取你要的数据
}
delete [] pData;
dwDataSize = 0;
}
dwValueNameSize=255;//注释1
dwIndex++;
}我插入的怎么还这么乱?
BYTE data[1500];
DWORD dataSize=1500;
没有动态分配内存。应该也可以吧?
RegEnumValue可以获得值的,第七个和第八个参数就是,好像不必再RegQueryValueEx
如果你确定数据为1500字节,当然也可以那样用喽。