系统相关
首页 > 系统相关> > windows检索注册表

windows检索注册表

作者:互联网

检索注册表函数: SHGetValue

函数原型

LSTATUS SHGetValue(
  [in]                HKEY   hkey,
  [in, optional]      LPCSTR pszSubKey,
  [in, optional]      LPCSTR pszValue,
  [out, optional]     DWORD  *pdwType,
  [out, optional]     void   *pvData,
  [in, out, optional] DWORD  *pcbData
);

hkey

当前打开的密钥的句柄,或以下任何预定义值。

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_USERS

实际上对应注册表地位置是这里,用户自己定义的注册表一般都会放在HKEY_LOCAL_MACHINE下,根据需要自己放置和检索。
image

pszSubKey

null 结尾的字符串的地址,它指定要从中检索值的子键的名称。
key开始向下查找具体的键,这个表示的就是键的目录。
例如ARE\Microsoft\Windows\CurrentVersion\App Paths就是现有安装在C盘的软件存放的对应路径。(个人判断)

pszValue

值得地址

pdwType

值的类型,一般使用的都是二进制数字标注一个bool类型或者字符串指定需要的路径位置。
微软官方定义:https://docs.microsoft.com/en-us/windows/win32/shell/hkey-type

pvData

这个是取出数据用的承载(数组),预先设置好它的大小,防止取值的时候溢出

LPDWORD

承载内存的大小

返回值

微软定义:如果成功则返回 ERROR_SUCCESS,否则返回 Winerror.h 中定义的非零错误代码。您可以使用带有 FORMAT_MESSAGE_FROM_SYSTEM 标志的FormatMessage函数来检索错误的一般描述。
但是其实只要判定他是不是返回了ERROR_SUCCESS就可以知道他是陈耕桑露出失败了。

实例

  WCHAR m_wszPath[1024] = { 0 };
  DWORD dwType = REG_SZ;
  DWORD dwSize = sizeof(m_wszPath) - 2;
  if (!(ERROR_SUCCESS == SHGetValue(HKEY_LOCAL_MACHINE, L"ARE\Microsoft\Windows\CurrentVersion\App Paths", L"Path", &dwType, m_wszPath, &dwSize) && dwType == REG_SZ && dwSize > 0 && PathIsDirectory(m_wszPath)))
  {
    return L"";
  }

标签:检索,wszPath,windows,HKEY,注册表,DWORD,optional
来源: https://www.cnblogs.com/MingGang/p/16398253.html