VC 读注册表获取安装程序

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

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



获取系统安装程序列表:

  1. //获取系统安装程序列表
  2. BOOLCMyListCtrlTestDlg::AllRegKey(HKEYhKey,LPCTSTRszDesKeyItem)
  3. {
  4. HKEYhSubKey;
  5. DWORDdwIndex=0;
  6. longlResult;
  7. inti=1;
  8. lResult=RegOpenKeyEx(hKey,szDesKeyItem,0,KEY_READ,&hSubKey);//打开注册表
  9. if(ERROR_SUCCESS==lResult){
  10. TCHARszKeyName[256]={0};
  11. DWORDcbName=256*sizeof(TCHAR);
  12. lResult=RegEnumKeyEx(hSubKey,dwIndex,szKeyName,&cbName,0,NULL,NULL,NULL);//获取字段
  13. while(lResult==ERROR_SUCCESS&&lResult!=ERROR_MORE_DATA){
  14. OutputDebugString(szKeyName);
  15. CStringstr;
  16. str.Format(_T("%d"),i);
  17. i=m_MyList.InsertItem(i,str);//插入到List控件显示
  18. m_MyList.SetItemText(i,1,szKeyName);
  19. dwIndex=dwIndex+1;//改变dwIndex,循环获取下移字段
  20. cbName=256*sizeof(TCHAR);
  21. lResult=RegEnumKeyEx(hSubKey,dwIndex,szKeyName,&cbName,0,NULL,NULL,NULL);
  22. i++;
  23. }
  24. RegCloseKey(hSubKey);//关闭注册表
  25. returnTRUE;
  26. }
  27. RegCloseKey(hSubKey);
  28. returnFALSE;
  29. }



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

  1. BOOLSoftList::AllRegKey(HKEYhKey,LPCTSTRszDesKeyItem)
  2. {
  3. HKEYhSubKey;
  4. DWORDdwIndex=0;
  5. longlResult;
  6. lResult=RegOpenKeyEx(hKey,szDesKeyItem,0,KEY_READ,&hSubKey);//打开注册表
  7. if(ERROR_SUCCESS==lResult){
  8. intid=1;//序号
  9. TCHARs_name[256]={0};//软件名
  10. TCHARs_DisplayName[256]={0};//显示名称
  11. TCHARs_Publisher[256]={0};//发布者
  12. TCHARs_InstallDate[12]={0};//安装日期
  13. DWORDs_EstimatedSize;//大小
  14. TCHARs_DisplayVersion[256]={0};//版本
  15. DWORDcbName=256*sizeof(TCHAR);
  16. DWORDcbName2=sizeof(TCHAR);
  17. DWORDtypeSZ=REG_SZ;//SZ注册表类型
  18. DWORDtypeDWORD=REG_DWORD;//DWORD注册表类型
  19. lResult=RegEnumKeyEx(hSubKey,dwIndex,s_name,&cbName,0,NULL,NULL,NULL);//获取字段
  20. while(lResult==ERROR_SUCCESS&&lResult!=ERROR_MORE_DATA){
  21. OutputDebugString(s_name);
  22. CStringstr;
  23. str.Format(_T("%d"),id);
  24. id=m_SoftList.InsertItem(id,str);//插入到List控件显示
  25. m_SoftList.SetItemText(id,1,s_name);
  26. HKEYhItem;//下一级注册表句柄
  27. if(::RegOpenKeyEx(hSubKey,s_name,0,KEY_READ,&hItem)==ERROR_SUCCESS){//提取下一级注册表程序的属性信息
  28. if(::RegQueryValueEx(hItem,_T("DisplayName"),0,&typeSZ,(LPBYTE)s_DisplayName,&cbName)==ERROR_SUCCESS){
  29. m_SoftList.SetItemText(id,1,s_DisplayName);
  30. }
  31. if(::RegQueryValueEx(hItem,_T("Publisher"),0,&typeSZ,(LPBYTE)s_Publisher,&cbName)==ERROR_SUCCESS){
  32. m_SoftList.SetItemText(id,2,s_Publisher);
  33. }
  34. if(::RegQueryValueEx(hItem,_T("InstallDate"),0,&typeSZ,(LPBYTE)s_InstallDate,&cbName)==ERROR_SUCCESS){
  35. if(s_InstallDate!=NULL){//判断是否为空
  36. m_SoftList.SetItemText(id,3,s_InstallDate);
  37. }
  38. }
  39. if(::RegQueryValueEx(hItem,_T("EstimatedSize"),0,&typeDWORD,(LPBYTE)&s_EstimatedSize,&cbName2)==ERROR_SUCCESS){
  40. floatf_Size=s_EstimatedSize/1024.0;//DWORD转换为CString类型
  41. CStringp_Size;
  42. p_Size.Format(_T("%.2fM"),f_Size);
  43. m_SoftList.SetItemText(id,4,p_Size);
  44. }
  45. if(::RegQueryValueEx(hItem,_T("DisplayVersion"),0,&typeSZ,(LPBYTE)s_DisplayVersion,&cbName)==ERROR_SUCCESS){
  46. m_SoftList.SetItemText(id,5,s_DisplayVersion);
  47. }
  48. ::RegCloseKey(hItem);//关闭二级注册表(程序属性信息)
  49. }
  50. dwIndex=dwIndex+1;//改变dwIndex,循环获取下移字段
  51. cbName=256*sizeof(TCHAR);
  52. lResult=RegEnumKeyEx(hSubKey,dwIndex,s_name,&cbName,0,NULL,NULL,NULL);
  53. id++;
  54. }
  55. RegCloseKey(hSubKey);//关闭一级注册表(读取程序信息)
  56. returnTRUE;
  57. }
  58. RegCloseKey(hSubKey);
  59. returnFALSE;
  60. }

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

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


运行结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值