从注册表中获取文件的安装路径

从注册表中取值(Windows平台)

本篇文章的内容是从Windows平台的注册表里取值


程序开发一般都会涉及从注册表获取相关信息,我将以从注册表获取软件的安装路径为例子

一、需求

我现在要获取微信的安装路径,如图所示:
从注册表中获取文件的安装路径_第1张图片

二、具体步骤

1.打开注册表

代码如下:

LONG lRet;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  // 要打开的根键 
		TEXT("SOFTWARE\\WOW6432Node\\Kingsoft\\Office\\6.0\\Common"), // 要打开的子键 
		0,       // 这个一定要为0 
		KEY_QUERY_VALUE,  //  指定打开方式,此为读 
		&hKey);    // 用来返回句柄 
if (lRet != ERROR_SUCCESS){
	std::cout << "路径打开失败"; // 判断是否打开成功 
	return NULL;
}

2.查询内容

代码如下:

lRet = RegQueryValueEx(hKey,  // 打开注册表时返回的句柄 
					   TEXT("InstallRoot"),  //要查询的名称,安装目录记录在这个保存 (即想要获取的值的名字)
					   NULL,   // 一定为NULL或者0 
					   NULL,
					   (LPBYTE)szProductType, // 我们要的东西放在这里(用于装载取回数据类型的一个变量) 
					   &dwBufLen);//接收返回值的返回地址(用于装在指定值的一个缓冲区)
if (lRet != ERROR_SUCCESS)	std::cout << "查询失败!!!"; // 判断是否查询成功 

完整代码

代码如下:

#include 
#include 
#include 
std::string getPath();
int main(){
	std::cout<<getPath();
	system("pause");
}
std::string getPath() {
	constexpr auto MY_BUFSIZE = 256;//动态分配    
	HKEY hKey;
	TCHAR szProductType[MY_BUFSIZE];
	memset(szProductType, 0, sizeof(szProductType));//数组清零操作
	DWORD dwBufLen = MY_BUFSIZE; 
	LONG lRet;
	// 下面是打开注册表, 只有打开后才能做其他操作 
	lRet = RegOpenKeyEx(HKEY_CURRENT_USER,  // 要打开的根键 
		TEXT("SOFTWARE\\Tencent\\WeChat"), // 要打开的子键 
		0,       // 这个一定要为0 
		KEY_QUERY_VALUE,  //  指定打开方式,此为读 
		&hKey);    // 用来返回句柄 
	if (lRet != ERROR_SUCCESS) {
		std::cout << "路径打开失败"; // 判断是否打开成功 
		return NULL;
	}
	//下面开始查询 
	lRet = RegQueryValueEx(hKey,  // 打开注册表时返回的句柄 
		TEXT("InstallPath"),  //要查询的名称,安装目录记录在这个保存 (即想要获取的值的名字)
		NULL,   // 一定为NULL或者0 
		NULL,
		(LPBYTE)szProductType, // 我们要的东西放在这里(用于装载取回数据类型的一个变量) 
		&dwBufLen);//接收返回值的返回地址(用于装在指定值的一个缓冲区)
	if (lRet != ERROR_SUCCESS)	std::cout << "查询失败!!!"; // 判断是否查询成功 
	RegCloseKey(hKey);//关闭句柄
	char ansi[MY_BUFSIZE];
	WideCharToMultiByte(CP_ACP, 0, szProductType, -1, ansi, sizeof(ansi), NULL, NULL);//转换
	return ansi;
}

你可能感兴趣的:(windows,10,c++)