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

使用Windows API 函数中的RegOpenKeyEx()函数和RegEnumKeyEx()函数来实现对注册表某项下的所有子项进行枚举。

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、RegEnumKeyEx函数:

原形:LONG RegEnumKeyEx(  
            HKEY hKey,     // 要列举的键的句柄  
            DWORD dwIndex,   // 欲获取的子项的索引。第一个子项的索引编号为零
            LPTSTR lpName,   // 子键的名称  
            LPDWORD lpcbName,  // 子键名称的长度  
            LPDWORD lpReserved, // 保留  
            LPTSTR lpClass,   // address of buffer for class string  
            LPDWORD lpcbClass, // address for size of class buffer  
            PFILETIME lpftLastWriteTime   
           // address for time key last written to  
      );  
  返回值:不成功返回非0,成功返回ERROR_SUCCESS  
  返回注册表键及其子键的详细信息。

  查看官方文档:http://msdn.microsoft.com/zh-cn/library/ms724862.aspx 

示例代码:

/*
* 版权:
* 文件名称:RegEnumKey.c
* 摘要:枚举注册表下的所有子项
* 当前版本:
* 作者:烈风
* 完成日期:
*/

# include <stdio.h>
# include <Windows.h>
# include <tchar.h>
# include <locale.h>


int main(void)
{
	_wsetlocale(LC_ALL, _T("")); //设置或检索本地运行环境,避免wprintf打印中文乱码

	HKEY hKey = NULL; //保存注册表的句柄 
	DWORD dwIndexs = 0; //需要返回子项的索引 
	TCHAR keyName[MAX_PATH] = { 0 }; //保存子键的名称 
	DWORD charLength = 256;  //想要读取多少字节并返回实际读取到的字符长度
	TCHAR *subKey = _T("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall");

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
	{		 
		while (RegEnumKeyEx(hKey, dwIndexs, keyName, &charLength, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
		{
			wprintf(_T("%d : %s\n"), dwIndexs, keyName);
			++dwIndexs;
			charLength = 256;
		}
	}
	if (hKey != NULL)
	{
		RegCloseKey(hKey);
	}
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值