如何正确读取注册表DWROD值

来源:百度知道 编辑:UC知道 时间:2024/04/29 07:19:11
用RegEnumValue函数,如果把传回值的部分用BYTE数组传递可以得到结果,但是用sprintf打印成十六进制的话跟正确的注册表值不一样。
如果用DWORD来装载就根本没有办法装载进去。

希望能有一小段源代码:
if(RegOpenKey(XXX,XXX,&hkey)==ERROR_SUCCESS)
{
//给出您的代码
}
HKEY hkey;
RegOpenKey(HKEY_CURRENT_USER,"Console",&hkey);
DWORD dwType,dwcbData=64;
BYTE value[64];//这里value数组的值和最后输出的结果不一样,证明已经装载了值
RegQueryValueEx(hkey,"ColorTable00",0,&dwType,(LPBYTE)value,&dwcbData);
CString csvalue;
csvalue.Format("%x",value);
cout<<csvalue<<"\n\n"<<dwType<<"\n";

这样的输出结果是13FF18,如果按%s输出就根本没有值,请问是为什么,能正确读出结果的源代码就给分,实际上这个DWORD键值是0……

BYTE数组传递 可以的话就是打印控制语句不正确吧~贴你代码来吧~

这样读:

HKEY hKey;
LPCTSTR strSubKeyName="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
DWORD buffer;
char tmp[255];
CString strRegKeyValue;
DWORD dwType;
RegOpenKeyEx(HKEY_CURRENT_USER,strSubKeyName,0,KEY_READ,&hKey);
RegQueryValueEx(hKey, "QQ", NULL, 0, (BYTE *) tmp, &buffer);
strRegKeyValue.Format("%s",tmp);
MessageBox(strRegKeyValue);
RegCloseKey( hKey );

如果你实现知道你要读去的键值的话,可以使用RegQueryValueEx函数。
我做的是字串读出的
可以参考一下:
LPBYTE owner_get=new BYTE[80];
DWORD type=REG_SZ;
DWORD cbData=80;
DWORD lReturn ;

//获取 子项 的 参数
::RegQueryValueEx(hKey,_T(""),NULL,&type,owner_get,&cbData);

还有就是记得在使用之后将注册表关闭
::RegCloseKey(hKey);