C/C++枚举注册表某项下的所有键值【代码示例】

使用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;
}


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值