必须先用regopenkeyex打开键并检查返回error_success,再调用regqueryvalueex;首次传lpdata为nullptr获取缓冲区大小,再分配宽字符缓冲区(含结尾 ),并确保权限掩码为key_read且路径正确。

如何用 RegOpenKeyEx 和 RegQueryValueEx 读取注册表字符串值
直接读取注册表值前必须先打开键,RegOpenKeyEx 是唯一安全的入口函数;不能跳过这步直接调用 RegQueryValueEx,否则返回 ERROR_FILE_NOT_FOUND 或 ERROR_ACCESS_DENIED。
常见错误是权限不足:比如试图读 HKEY_LOCAL_MACHINE 下的键却没以管理员身份运行程序,此时 RegOpenKeyEx 返回 ERROR_ACCESS_DENIED,而非键不存在。应优先检查返回值是否为 ERROR_SUCCESS,再继续查询。
- 使用
KEY_READ访问掩码,不要硬写KEY_ALL_ACCESS - 目标键路径如
"SOFTWARE\Microsoft\Windows\CurrentVersion",注意反斜杠要双写 -
RegQueryValueEx第五参数(lpData)传nullptr可先获取所需缓冲区大小,避免截断 - 字符串值类型通常是
REG_SZ或REG_EXPAND_SZ,需用std::wstring接收并手动补
