获取注册表键值并格式转换
程序员文章站
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。
根据它的值,再拼接出新的注册表路径获取别的注册表键值。
上一篇: C#获取枚举的描述
下一篇: C#实现获取枚举的描述