从注册表中取值(Windows平台)
本篇文章的内容是从Windows平台的注册表里取值
程序开发一般都会涉及从注册表获取相关信息,我将以从注册表获取软件的安装路径为例子
一、需求
我现在要获取微信的安装路径,如图所示:
二、具体步骤
1.打开注册表
代码如下:
LONG lRet;
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\WOW6432Node\\Kingsoft\\Office\\6.0\\Common"),
0,
KEY_QUERY_VALUE,
&hKey);
if (lRet != ERROR_SUCCESS){
std::cout << "路径打开失败";
return NULL;
}
2.查询内容
代码如下:
lRet = RegQueryValueEx(hKey,
TEXT("InstallRoot"),
NULL,
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,
KEY_QUERY_VALUE,
&hKey);
if (lRet != ERROR_SUCCESS) {
std::cout << "路径打开失败";
return NULL;
}
lRet = RegQueryValueEx(hKey,
TEXT("InstallPath"),
NULL,
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;
}
|