新闻中心
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
答案:在Windows下,C++通过RegOpenKeyEx、RegCreateKeyEx、RegQueryValueEx、RegSetValueEx等API操作注册表,实现对注册表项的打开、创建、读取、写入及删除,需注意权限和资源释放。

在Wi
ndows平台下,C++可以通过调用Windows API来操作注册表。注册表是Windows操作系统中用于存储系统、应用程序和用户配置信息的核心数据库。通过API函数,程序可以读取、写入、创建或删除注册表项和值。
1. 打开注册表项(RegOpenKeyEx)
要访问一个已存在的注册表项,需要使用 RegOpenKeyEx 函数。
LONG RegOpenKeyEx( HKEY hKey, // 父键句柄,如 HKEY_LOCAL_MACHINE LPCTSTR lpSubKey, // 子键名称 DWORD ulOptions, // 保留,通常为0 REGSAM samDesired, // 访问权限,如 KEY_READ、KEY_WRITE PHKEY phkResult // 接收打开的子键句柄 );
示例:打开 HKEY_LOCAL_MACHINESOFTWAREMyApp
HKEY hKey;
LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\MyApp"),
0, KEY_READ, &hKey);
if (result == ERROR_SUCCESS) {
// 成功打开
} else {
// 打开失败
}
2. 创建或打开注册表项(RegCreateKeyEx)
如果目标注册表项可能不存在,应使用 RegCreateKeyEx,它会尝试打开,若不存在则创建。
LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition );
常用参数说明:
- dwOptions:可设为 REG_OPTION_NON_VOLATILE(持久保存)
- lpdwDisposition:返回是新建还是已存在(REG_CREATED_NEW_KEY 或 REG_OPENED_EXISTING_KEY)
示例:创建或打开 MyCompany 键
HKEY hKey;
DWORD disposition;
LONG result = RegCreateKeyEx(HKEY_CURRENT_USER,
TEXT("SOFTWARE\MyCompany"), 0, NULL, 0,
KEY_WRITE, NULL, &hKey, &disposition);
if (result == ERROR_SUCCESS) {
if (disposition == REG_CREATED_NEW_KEY)
// 新建成功
else
// 已存在并打开
RegCloseKey(hKey);
}
3. 读取注册表值(RegQueryValueEx)
使用 RegQueryValueEx 读取指定键下的值数据。
LONG RegQueryValueEx( HKEY hKey, LPTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
关键点:
- lpType 返回数据类型,如 REG_SZ、REG_DWORD、REG_BINARY
- lpcbData 初始时传入缓冲区大小,调用后更新为实际字节数
示例:读取一个字符串值
HKEY hKey;
TCHAR buffer[256];
DWORD bufferSize = sizeof(buffer);
LONG result = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\MyApp"), 0, KEY_READ, &hKey);
if (result == ERROR_SUCCESS) {
result = RegQueryValueEx(hKey, TEXT("InstallPath"), NULL, NULL,
(LPBYTE)buffer, &bufferSize);
if (result == ERROR_SUCCESS) {
// buffer 中即为路径字符串
}
RegCloseKey(hKey);
}
4. 写入注册表值(RegSetValueEx)
使用 RegSetValueEx 设置某个键的值。
ChatGPT Writer
免费 Chrome 扩展程序,使用 ChatGPT AI 生成电子邮件和消息。
106
查看详情
LONG RegSetValueEx( HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData );
常见类型:
- REG_SZ:以 结尾的字符串
- REG_DWORD:32位整数
- REG_QWORD:64位整数
- REG_MULTI_SZ:多个字符串组成的数组
示例:写入安装路径
HKEY hKey;
LONG result = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\MyApp"),
0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL);
if (result == ERROR_SUCCESS) {
TCHAR path[] = TEXT("C:\MyApp");
RegSetValueEx(hKey, TEXT("InstallPath"), 0, REG_SZ,
(const BYTE*)path, (lstrlen(path)+1)*sizeof(TCHAR));
RegCloseKey(hKey);
}
5. 删除注册表项或值
删除值使用 RegDeleteValue,删除子键使用 RegDeleteKey。
删除值:
RegDeleteValue(hKey, TEXT("OldValue"));
删除空子键:
RegDeleteKey(HKEY_CURRENT_USER, TEXT("SOFTWARE\MyApp\Temp"));
注意:被删除的键必须为空,否则删除失败。
6. 关闭注册表句柄(RegCloseKey)
每次成功打开或创建注册表键后,必须使用 RegCloseKey 关闭句柄,防止资源泄漏。
RegCloseKey(hKey);
基本上就这些。掌握这几个核心API,就能在C++中灵活操作Windows注册表。注意权限问题,在某些系统位置(如 HKEY_LOCAL_MACHINE)写入可能需要管理员权限。同时建议操作前备份关键注册表项,避免误操作导致系统问题。
以上就是C++如何操作注册表_Windows平台下C++读写注册表的API函数详解的详细内容,更多请关注其它相关文章!
# c++
# 打开注册表
# 类中
# 如何使用
# 回调
# 句柄
# red
# win
# amd
# 字节
# app
# 操作系统
# windows
# go
# word
# 注册表
# mac
# 如何推广营销棉花糖
# 天猫店软文推广营销
# 宝鸡做推广网站怎么样啊
# seo域名与程序
# 翔安网站建设系统
# 代做seo包年优化
# 揭阳seo优化厂商
# 百度网站制作优化
# 安阳网站的推广
# seo关键词什么牌子好
# 设为
# 如何在
# 多个
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
MongoDB聚合管道:正确匹配对象数组中_id的方法
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
Angular Material 垂直步进器:实现底部到顶部排序的教程
Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
曝R星经典之作开发图 设计简陋但信息密集!
J*a中实现Go语言select通道多路复用机制
2025-2030年全球乘用车销量预测:新能源成增长主力
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
必由学官方平台入口 必由学在线课堂登录地址
在Pyomo中实现基于变量的条件约束:Big-M方法详解
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
学习通网页版快速入口 学习通官网网页版直接打开
Python:递归比较文件夹内容并找出特定类型文件的差异
Mac终端命令大全_Mac常用Terminal指令速查
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
微信聊天记录怎么加密_微信聊天记录加密方法
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
微信网页版官方快速登录入口 微信网页版网页版账号直达
蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
漫蛙网页登录入口 漫蛙漫画官方授权网址
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
小米Civi 4录制视频过暗_小米Civi 4亮度优化
2026春节假期票务安排_2026春节放假购票指南
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
深入理解J*a链表中的IPosition接口与使用
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
Composer如何在生产环境安全地执行composer update
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
电脑IP地址怎么查 查看本机IP地址的几种方法
J*aScript Promise链中如何正确终止后续.then执行并处理错误
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
Pandas DataFrame 多条件优先级排序与排名
word中如何让数字纵向排列_Word数字纵向排列方法
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异


2025-12-01
浏览次数:次
返回列表