欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取注册表键值并格式转换

程序员文章站 2022-06-12 17:05:56
...

目的:需要获取注册表键值,内容是GUID,类型是REG_SZ,

然后再将这个GUID与另一个地址拼成一个新的注册表路径,RegOpenKeyW的路径格式要求为LPCSTR。

这里把获取到的GUID用TCHAR格式存储。

HRESULT GetGUIDReg(TCHAR GUID[])
{
	HRESULT hr = E_FAIL;
	HKEY hKey = NULL;
	hr = RegOpenKey(HKEY_LOCAL_MACHINE, /*注册表的路径*/, &hKey);
	GOTO_IF_FAILED(hr);
	DWORD nRequiredSize = 0;
	hr = ::RegQueryValueEx(hKey, /*注册表名*/, NULL, NULL, NULL, &nRequiredSize);
	GOTO_IF_FAILED(hr);
	// Read data
	DWORD dwType = REG_SZ;
	hr = ::RegQueryValueEx(hKey, /*注册表名*/, NULL, &dwType,
		(LPBYTE)GUID, &nRequiredSize);
	GOTO_IF_FAILED(hr);
Exit:
	RegCloseKey(hKey);
	return hr;
}
使用时,参数是传入传出的。调用时先定义 一个vector:

vector<TCHAR> GUID;
hr=GetGUIDReg(GUID);

格式转换之前,先定义一个basic_string

typedef basic_string<TCHAR> GUIDString;
//使用:
GUIDString strSetting(GUID.begin(),GUID.end());
TCHAR newPath[260]={0};
_tcscat_s(newPath,/*之前的注册表路径*/);//格式转换
_tcscat_s(newPath,_T("\\"));
_tcscat_s(newPath,strSetting.c_str());
_tcscat_s(newPath,_T("\\"));
_tcscat_s(newPath,/*新的注册表名*/);

//格式转换完成后,用同样的方法,将newPath做为新路径,获取新的注册表键值
实际应用:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes

这个是用于存储当前的电源计划的,值是GUID。

根据它的值,再拼接出新的注册表路径获取别的注册表键值。