IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 从注册表中获取文件的安装路径 -> 正文阅读

[系统运维]从注册表中获取文件的安装路径

从注册表中取值(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;
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:53:55  更:2021-07-24 11:56:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:54:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码