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

来源:互联网 发布:阿里云二手域名 编辑:程序博客网 时间:2024/06/08 11:27

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


0 0