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

从注册表中取值(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;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用JavaScript调用注册表来执行某个文件时,我们需要借助操作系统的API以及JavaScript的一些特定函数。以下是一个简单的步骤: 首先,我们需要使用JavaScript的内置函数创建一个ActiveXObject对象。ActiveXObject是用于与操作系统进行交互的对象,可以通过其实例来实现对注册表的访问。 接下来,我们需要使用该对象的Open方法来打开注册表。在Windows操作系统注册表是一个数据库,用于存储系统的配置信息和程序设置。我们可以通过路径来指定要打开的特定键,例如"HKEY_CLASSES_ROOT"。 然后,我们可以使用该对象的Get方法来获取特定键或值的信息。这些信息包括文件路径、运行命令等。我们可以通过指定键的路径和名称来获取所需的信息。 一旦获取文件路径,我们可以使用操作系统的API函数,如ShellExecute,来调用该文件。ShellExecute函数接受文件路径作为参数,并根据文件的关联程序来打开它。这样,我们就可以通过JavaScript调用注册表文件了。 需要注意的是,由于涉及到操作系统的安全机制,通常需要进行适当的安全设置和权限验证才能成功地调用注册表文件。另外,在使用ActiveXObject时,我们需要确认浏览器的安全设置允许使用ActiveX控件。 总结起来,通过JavaScript调用注册表文件可以使用ActiveXObject对象来实现。我们可以通过Open方法打开注册表,通过Get方法获取文件路径和其他信息,然后使用操作系统的API函数来调用该文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值