函数打开注册表,获得安装软件的信息

注册的信息,可以用函数打开,也可以命令获取注册表的信息

这段代码是用函数打开注册表,获取相应的信息

用命令的话可以用reg export HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall

然后再找出相应字段Findstr "HKEY DisplayName DisplayVersion InstallDate Publisher InstallLocation“

 

//函数打开注册表,获得安装软件的信息
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <Windows.h>
#include <list>
#include <atlstr.h>
#include <vector>

using namespace std;

struct SoftInfo
{
 // 软件名 
 CString m_strSoftName;
 // 软件版本号
 CString m_strSoftVersion;
 //软件安装时间
 CString m_strSoftDate;
 // 软件安装目录
 CString m_strInstallLocation;
 // 软件发布厂商
 CString m_strPublisher;
 // 主程序所在完整路径
 CString m_strMainProPath;
 // 卸载exe所在完整路径
 CString m_strUninstallPth;
};

void main()
{

 HKEY RootKey;            // 主键
 LPCTSTR lpSubKey;        // 子键名称
 HKEY hkResult;            // 将要打开键的句柄
 HKEY hkRKey;
 LONG lReturn;            // 记录读取注册表是否成功
 CString strBuffer;
 CString strMidReg;

 DWORD index = 0;
 TCHAR szKeyName[255] = {0};        // 注册表项名称
 TCHAR szBuffer[255] = {0};
 DWORD dwKeyLen = 255;
 DWORD dwNameLen = 255;
 DWORD dwType = REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;
 RootKey = HKEY_LOCAL_MACHINE;
 struct SoftInfo softinfo;
 vector<SoftInfo> m_SoftInfoArr;
 vector<SoftInfo> m_SystemPatchesArr;
 char sotrware_line[1024] = "" ;
 char patch_line[1024] = "" ;
 lpSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");

 lReturn = RegOpenKeyEx(RootKey, lpSubKey, 0, KEY_ALL_ACCESS, &hkResult);

 if (lReturn == ERROR_SUCCESS)
 {

  while (ERROR_NO_MORE_ITEMS !=RegEnumKeyEx(hkResult, index, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL))
  {
   index++;
   strBuffer.Format(_T("%s"), szKeyName);
   if (!strBuffer.IsEmpty())
   {
    strMidReg = (CString)lpSubKey +"\\" + strBuffer;

    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strMidReg, 0, KEY_ALL_ACCESS, &hkRKey)==ERROR_SUCCESS)
    {
     RegQueryValueEx(hkRKey, _T("DisplayName"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strSoftName = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

     RegQueryValueEx(hkRKey, _T("DisplayVersion"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strSoftVersion = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

     RegQueryValueEx(hkRKey, _T("InstallDate"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strSoftDate = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

     RegQueryValueEx(hkRKey, _T("InstallLocation"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strInstallLocation = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

     RegQueryValueEx(hkRKey, _T("Publisher"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strPublisher = szBuffer;
     dwNameLen = 255;
      
     RegQueryValueEx(hkRKey, _T("InstallLocation"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strMainProPath = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

     RegQueryValueEx(hkRKey, _T("UninstallString"), 0, &dwType, (LPBYTE)szBuffer,&dwNameLen);
     softinfo.m_strUninstallPth = szBuffer;
     dwNameLen = 255;
     memset(szBuffer, 0, 255);

      if(!softinfo.m_strSoftName.IsEmpty())
      {
       if(strBuffer.GetAt(0) == 'K' && strBuffer.GetAt(1) == 'B')
       {
        m_SystemPatchesArr.push_back(softinfo);
       }
       else
       {
        //sotrware_line = SoftInfo.m_strSoftName + '|' + SoftInfo.m_strSoftVersion + '|' + SoftInfo.m_strInstallLocation + '|' + SoftInfo.m_strMainProPath + '|' + SoftInfo.m_strUninstallPth ; 
        m_SoftInfoArr.push_back(softinfo);
       }
      }
     }

    dwKeyLen = 255;
    memset(szKeyName,0, 255);
   }
  }
  RegCloseKey(hkResult);
 }
 else
 {
  ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING);
 }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值