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

本文详细介绍了如何在C++程序中通过Windows API从注册表读取微信的安装路径。首先,使用RegOpenKeyEx函数打开注册表的特定子键,然后调用RegQueryValueEx函数查询InstallPath的值,从而获取到微信的安装目录。代码示例展示了整个过程,包括错误处理和值的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


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

一、需求

我现在要获取微信的安装路径,如图所示:
在这里插入图片描述

二、具体步骤

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 <windows.h>
#include <iostream>
#include <string>
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值