VC 读注册表获取安装程序

               

Windows 系统中,安装程序都可以在注册表 HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Uninstall 获取,并且xp、vista、win7、win8都一样

打开注册表命令:regedit,依次展开上述注册表路径,安装程序列表如下图:



 

获取系统安装程序列表:

// 获取系统安装程序列表  BOOL CMyListCtrlTestDlg::AllRegKey(HKEY hKey, LPCTSTR szDesKeyItem)  {      HKEY hSubKey;      DWORD dwIndex = 0;      long lResult;      int i = 1;        lResult = RegOpenKeyEx(hKey, szDesKeyItem, 0, KEY_READ, &hSubKey);      // 打开注册表      if(ERROR_SUCCESS == lResult) {          TCHAR szKeyName[256] = { 0 };          DWORD cbName = 256*sizeof(TCHAR);            lResult = RegEnumKeyEx(hSubKey, dwIndex, szKeyName, &cbName, 0, NULL, NULL, NULL);      // 获取字段          while (lResult == ERROR_SUCCESS && lResult != ERROR_MORE_DATA){              OutputDebugString(szKeyName);                  CString str;              str.Format(_T("%d"), i);                i = m_MyList.InsertItem(i, str);        // 插入到List控件显示              m_MyList.SetItemText(i,1,szKeyName);                  dwIndex = dwIndex + 1;          // 改变dwIndex,循环获取下移字段              cbName = 256*sizeof(TCHAR);              lResult = RegEnumKeyEx(hSubKey, dwIndex, szKeyName, &cbName, 0, NULL, NULL, NULL);                i++;            }          RegCloseKey(hSubKey);       // 关闭注册表          return TRUE;      }      RegCloseKey(hSubKey);      return FALSE;  } 


 
获取安装程序属性信息(二次读取注册表):

BOOL SoftList::AllRegKey(HKEY hKey, LPCTSTR szDesKeyItem){ HKEY hSubKey; DWORD dwIndex = 0long lResult; lResult = RegOpenKeyEx(hKey, szDesKeyItem, 0, KEY_READ, &hSubKey);  // 打开注册表 if(ERROR_SUCCESS == lResult) {  int id = 1;      // 序号  TCHAR s_name[256] = {0};  // 软件名     TCHAR s_DisplayName[256] = {0};   // 显示名称  TCHAR s_Publisher[256] = {0};   // 发布者  TCHAR s_InstallDate[12] = {0};   // 安装日期  DWORD s_EstimatedSize;     // 大小  TCHAR s_DisplayVersion[256] = { 0 }; // 版本  DWORD cbName = 256*sizeof(TCHAR);   DWORD cbName2 = sizeof(TCHAR);  DWORD typeSZ = REG_SZ;   // SZ 注册表类型  DWORD typeDWORD = REG_DWORD; // DWORD 注册表类型  lResult = RegEnumKeyEx(hSubKey, dwIndex, s_name, &cbName, 0, NULL, NULL, NULL);  // 获取字段  while (lResult == ERROR_SUCCESS && lResult != ERROR_MORE_DATA){   OutputDebugString(s_name);   CString str;   str.Format(_T("%d"), id);   id = m_SoftList.InsertItem(id, str);  // 插入到List控件显示   m_SoftList.SetItemText(id, 1, s_name);   HKEY hItem;  // 下一级注册表句柄   if(::RegOpenKeyEx(hSubKey, s_name, 0, KEY_READ, &hItem) == ERROR_SUCCESS){  // 提取下一级注册表程序的属性信息    if (::RegQueryValueEx(hItem, _T("DisplayName"), 0, &typeSZ, (LPBYTE)s_DisplayName, &cbName) == ERROR_SUCCESS) {     m_SoftList.SetItemText(id, 1, s_DisplayName);    }    if (::RegQueryValueEx(hItem, _T("Publisher"), 0, &typeSZ, (LPBYTE)s_Publisher, &cbName) == ERROR_SUCCESS) {     m_SoftList.SetItemText(id, 2, s_Publisher);    }    if (::RegQueryValueEx(hItem, _T("InstallDate"), 0, &typeSZ, (LPBYTE)s_InstallDate, &cbName) == ERROR_SUCCESS) {     if (s_InstallDate != NULL) {  // 判断是否为空      m_SoftList.SetItemText(id, 3, s_InstallDate);       }    }    if (::RegQueryValueEx(hItem, _T("EstimatedSize"), 0, &typeDWORD, (LPBYTE)&s_EstimatedSize, &cbName2) == ERROR_SUCCESS) {     float f_Size = s_EstimatedSize/1024.0// DWORD 转换为 CString 类型     CString p_Size;     p_Size.Format(_T("%.2f M"), f_Size);          m_SoftList.SetItemText(id, 4, p_Size);    }    if (::RegQueryValueEx(hItem, _T("DisplayVersion"), 0, &typeSZ, (LPBYTE)s_DisplayVersion, &cbName) == ERROR_SUCCESS) {     m_SoftList.SetItemText(id, 5, s_DisplayVersion);    }        ::RegCloseKey(hItem); // 关闭二级注册表(程序属性信息)   }   dwIndex = dwIndex + 1;   // 改变dwIndex,循环获取下移字段   cbName = 256*sizeof(TCHAR);   lResult = RegEnumKeyEx(hSubKey, dwIndex, s_name, &cbName, 0, NULL, NULL, NULL);   id++;  }  RegCloseKey(hSubKey); // 关闭一级注册表(读取程序信息)  return TRUE; } RegCloseKey(hSubKey); return FALSE;}

通过注册表路径获取调用:

AllRegKey(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Uninstall"));


 

运行结果:



           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值