

新闻资讯
行业动态Windows C++ 操作注册表依赖 RegOpenKeyEx、RegQueryValueEx、RegSetValueEx、RegCreateKeyEx 和 RegCloseKey 等 API;需注意权限、错误检查、Unicode 编码及字节长度(非字符数),HKEY_LOCAL_MACHINE 通常需管理员权限。
Windows C++ 操作注册表主要靠 Windows API 提供的一组函数,核心是 RegOpenKeyEx、RegQueryValueEx、RegSetValueEx、RegCreateKeyEx 和 RegCloseKey。不需要第三方库,但要注意权限、错误检查和字符串编码(推荐用 Unicode / wchar_t)。
注册表操作前必须先获取键句柄。常用根键有 HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER 等。
RegOpenKeyEx,指定访问权限如 KEY_READ;失败返回非零错误码,需检查RegCreateKeyEx,传入 KEY_WRITE 或 KEY_ALL_ACCESS;若父键不存在会逐级创建(需足够权限)L"Software\\MyApp" 是对的,L"\\Software\\MyApp" 会失败读取前需知道值名(value name)、数据类型(如 REG_SZ、REG_DWORD)和缓冲区大小。
RegQueryValueEx 传入 nullptr 的缓冲区,获取所需大小(lpcbData 输出)REG_SZ 是宽字符字符串,结尾有双 \0;REG_DWORD 直接读 4 字节)REG_DWORD → DWORD,REG_QWORD → ULONGLONG,REG_SZ → wchar_t*

写入时必须保证目标键已打开且有写权限(如用 RegCreateKeyEx 打开)。
RegSetValueEx 第 5 个参数是数据指针,第 6 个是字节数(不是字符数!wcslen(str)*sizeof(wchar_t) + sizeof(wchar_t) 才是完整字符串长度)REG_SZ 时务必包含结尾的空字符,否则读取可能乱码或截断HKEY_LOCAL_MACHINE 需管理员)、键只读打开、路径不存在、数据长度不匹配每次成功调用 RegOpenKeyEx 或 RegCreateKeyEx 后,必须配对调用 RegCloseKey,否则资源泄漏。
LONG,成功为 ERROR_SUCCESS(即 0),其余均为错误码FormatMessage 将错误码转为可读字符串用于调试HKEY_LOCAL_MACHINE 通常需要以管理员身份运行程序;HKEY_CURRENT_USER 一般无需提权基本上就这些。注册表操作不复杂但容易忽略权限和字符串长度细节,写之前多看 MSDN 对应函数的参数说明,尤其 lpcbData 和 cbData 的单位是字节。