C/C++枚举注册表某项下的所有键值【代码示例】
来源:互联网 发布:淘宝宝贝介绍模板 编辑:程序博客网 时间:2024/06/08 11:28
使用Windows API 函数中的RegOpenKeyEx()函数和RegEnumValue()函数来实现对注册表某项下的所有键值进行枚举。
1、RegOpenKeyEx 函数:
原形:LONG RegOpenKeyEx(
HKEY hKey, // 要打开主键名
LPCTSTR lpSubKey, // 需要打开的子键或路径
DWORD ulOptions, // 保留,为0
REGSAM samDesired, // 操作权限标志
PHKEY phkResult // 指向你打开键的句柄 (通过指针返回)
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:该函数负责打开指定的键或子键,如果不存在他不建立。
查看官方文档:http://msdn.microsoft.com/zh-cn/aa912084
2、RegEnumValue函数:
原形:LONG RegEnumValue(
HKEY hKey, // 要查询的已打开的键的句柄
DWORD dwIndex, // 读取名称的索引号
LPTSTR lpValueName, // 返回所读取的键的名称
LPDWORD lpcbValueName, // 返回读取名称的长度,不含chr(0)
LPDWORD lpReserved, // 保留,为0
LPDWORD lpType, // 返回所读取的数据类型
LPBYTE lpData, // 返回所读取的键的值数据
LPDWORD lpcbData // 返回所读取的数据长度
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:列出某Key的所有名称的值,变化索引即可遍历整个键下的名称和数据。
查看微软官方文档:http://msdn.microsoft.com/zh-cn/aa914418
代码示例:
# include <stdio.h># include <tchar.h># include <Windows.h># include <locale.h>int main(void){_wsetlocale(LC_ALL, _T(""));HKEY hKey = NULL; //保存打开注册表的句柄 TCHAR *subKey = _T("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\2345PCSafe"); //需要打开的注册表子项if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS){DWORD dwIndex = 0; // 注册表项的键值索引 TCHAR valueName[MAX_PATH] = { 0 }; //保存项下键的名称 DWORD length = MAX_PATH; // 保存返回读取的字符长度 BYTE keyData[MAX_PATH] = { 0 }; //保存键的值 DWORD lengthData = MAX_PATH; //保存值得长度 DWORD dwType = REG_SZ; //键值的类型 while (RegEnumValue(hKey, dwIndex, valueName, &length, 0, &dwType, keyData, &lengthData) == ERROR_SUCCESS){wprintf(_T("%ld : 键值名称:%s ,键值类型:%lu,键值:%s\n"), dwIndex, valueName, dwType, keyData);dwIndex++;length = MAX_PATH;lengthData = MAX_PATH;}}else{wprintf(_T("false"));}if (hKey != NULL){RegCloseKey(hKey);}getchar();return 0;}
- C/C++枚举注册表某项下的所有键值【代码示例】
- C/C++枚举注册表某项下的所有子项【代码示例】
- InstallScript中枚举注册表某键下的子键值Sample代码
- 查询、创建、设置注册表键值的示例代码
- 如何从注册表读一个键值出来(C代码)?
- C/C++新建注册表项【代码示例】
- 注册表枚举键值
- C/C++读写注册表中二进制数据【代码示例】
- 枚举注册表键名与键值
- 枚举注册表键名与键值
- Vc 枚举注册表键值名
- c#的委托代码示例
- c#的委托代码示例
- 查找二叉排序树中最大的键值(c代码)
- [C++] 如何枚举所有打印机
- 【C语言】【枚举所有可能】
- 注册表的操作(C#)
- c语言所有的errno枚举值含义
- 集线器,路由器,交换机的作用和区别是什么?如何区分交换机,集线器,路由器?
- 查看so库的方法
- 交换机,集线器,路由器这三者怎样区分,各自的作用是什么?
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)
- 《unix高级环境编程》进程间通信——信号量
- C/C++枚举注册表某项下的所有键值【代码示例】
- linux下提示bash:command not found
- 内核启动全过程
- 快速创建和mysql表对应的java domain实体类 .
- 在java中生成验证码的问题
- ios开发中的基本设计模式 (简单归类)
- linux yum使用管理详细使用
- poj3254Corn Fields(状态压缩dp入门)
- POJ 3468 A Simple Problem with Integers(线段树 成段更新)