Unicode 下取注册表的值中文乱码问题


CString strSonkey = _T("SOFTWARE\\WOW6432Node\\tencent\\LOL");
CString strname = _T("setup");
CString strPath = _T("");
GetExePath(HKEY_LOCAL_MACHINE, strSonkey, strname, strPath);
//HKEY_LOCAL_MACHINE为注册表五主键之一
//_T("SOFTWARE\\WOW6432Node\\tencent\\LOL");子健
//_T("setup");  数据项


bool GetExePath(HKEY primaryKey, CString sonKey,  CString name, CString &value)
{
	HKEY hKey;
	long ret0, ret1;//返回值
	DWORD dataType;//数据类型
	DWORD dataSize;//数据长度
	char data[SIZE] = { 0 };


	char exeVendor[SIZE];
	memset(exeVendor, 0x00, SIZE);

	ret0 = RegOpenKeyEx(primaryKey, sonKey,NULL, KEY_READ,&hKey);//打开主键

	if (ret0 != ERROR_SUCCESS)
	{
		
		AfxMessageBox(_T("注册表打开失败!"));
		return false;
	}
	USES_CONVERSION;

    //在使用RegQueryValueEx时出现乱码,得到的数据,每两个字符中间有‘/0’,改用RegQueryValueExA解决问题
	ret1 = RegQueryValueExA(hKey,T2A(name), NULL, &dataType, (LPBYTE)data, &dataSize);//获取数据
	if (ret1 != ERROR_SUCCESS)
	{
		AfxMessageBox(_T("获取路劲失败!"));
		return false;
	}

	// RegQueryValueEx函数得到数据返回值为因为键值数据每个字符中间都是0x00 = “/0”,so  puts只能输出一个字符。我也是调试才看到的,还以为是API参数错误呢。  
	/*for (unsigned i = 0, j = 0; i < dataSize; i += 2, j++)
	{
		memcpy(exeVendor + j, data + i, 1);
	}*/
	RegCloseKey(hKey);
	value = data;
	
	return true;
}

//在使用RegQueryValueEx时出现中文乱码,得到的数据,每两个字符中间有‘/0’,改用RegQueryValueExA解决中文乱码问题
   

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值