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解决中文乱码问题