C++通过访问注册表获取已安装软件信息列表
2013-05-17 08:51
579 查看
欢迎加入C++编程群:
// ------------------------------------------------------------------------------------------------------------------------ // FlieNmae: // SofInfo.h // Remark: // 通过读取注册表获得本机已安装软件信息。 // ------------------------------------------------------------------------------------------------------------------------ #pragma once #include <vector> struct SoftInfo { // 软件名 CString m_strSoftName; // 软件版本号 CString m_strSoftVersion; // 软件安装目录 CString m_strInstallLocation; // 软件发布厂商 CString m_strPublisher; // 主程序所在完整路径 CString m_strMainProPath; // 卸载exe所在完整路径 CString m_strUninstallPth; }; class CSoftInfo { private: // 保存已安装常用软件安装信息 std::vector<SoftInfo> m_SoftInfoArr; // 保存系统补丁信息 std::vector<SoftInfo> m_SystemPatchesArr; public: CSoftInfo(); ~CSoftInfo(){} // 获取一个包含常用软件安装信息的Vector std::vector<SoftInfo> GetSoftInfo (void) const; // 获取所有已安装常用软件名 void GetSoftName (std::vector<LPCTSTR>& lpszSoftName); // 获取所有已安装常用软件版本号 void GetSoftVersion (std::vector<LPCTSTR>& lpszSoftVersion); // 获取所有已安装常用软件安装目录 void GetInstallLocation (std::vector<LPCTSTR>& lpszInstallLocation); // 获取所有已安装常用软件发布厂商 void GetPublisher (std::vector<LPCTSTR>& lpszPublisher); // 获取所有已安装常用软件主程序所在路径 void GetMainProPath (std::vector<LPCTSTR>& lpszMainProPath); // 获取所有已安装常用软件卸载程序所在路径 void GetUninstallPth (std::vector<LPCTSTR>& lpszSoftName); // 获取一个包含系统补丁信息的Vector std::vector<SoftInfo> GetSystemPatchesInfo (void) const; // 获取所有已安装系统补丁名 void GetSystemPatchesName (std::vector<LPCTSTR>& lpszSoftName); };
// FlieNmae: Softinfo.cpp #include "stdafx.h" #include "SoftInfo.h" CSoftInfo::CSoftInfo() { struct SoftInfo softinfo; 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; 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 +_T("\\") + 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("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 { m_SoftInfoArr.push_back(softinfo); } } } dwKeyLen = 255; memset(szKeyName,0, 255); } } RegCloseKey(hkResult); } else { ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING); } } std::vector<SoftInfo> CSoftInfo::GetSoftInfo (void) const { return m_SoftInfoArr; } void CSoftInfo::GetSoftName (std::vector<LPCTSTR>& lpszSoftName) { std::vector<SoftInfo>::iterator iter; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { lpszSoftName.push_back(iter->m_strSoftName); } } void CSoftInfo::GetSoftVersion (std::vector<LPCTSTR>& lpszSoftVersion) { std::vector<SoftInfo>::iterator iter; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { if (!(iter->m_strSoftVersion).IsEmpty()) { lpszSoftVersion.push_back(iter->m_strSoftVersion); } } } void CSoftInfo::GetInstallLocation (std::vector<LPCTSTR>& lpszInstallLocation) { std::vector<SoftInfo>::iterator iter; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { if (!(iter->m_strInstallLocation).IsEmpty()) { lpszInstallLocation.push_back(iter->m_strInstallLocation); } } } void CSoftInfo::GetPublisher (std::vector<LPCTSTR>& lpszPublisher) { std::vector<SoftInfo>::iterator iter; bool bSign; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { bSign = true; // 初步去重复厂商 std::vector<LPCTSTR>::iterator itr; for (itr = lpszPublisher.begin(); itr != lpszPublisher.end(); itr++) { if (iter->m_strPublisher == (CString)*itr) { bSign = false; } } if (bSign) { lpszPublisher.push_back(iter->m_strPublisher); } } } void CSoftInfo::GetMainProPath (std::vector<LPCTSTR>& lpszMainProPath) { std::vector<SoftInfo>::iterator iter; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { if (!(iter->m_strMainProPath).IsEmpty()) { lpszMainProPath.push_back(iter->m_strMainProPath); } } } void CSoftInfo::GetUninstallPth (std::vector<LPCTSTR>& lpszSoftName) { std::vector<SoftInfo>::iterator iter; for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++) { if (!(iter->m_strUninstallPth).IsEmpty()) { lpszSoftName.push_back(iter->m_strUninstallPth); } } } std::vector<SoftInfo> CSoftInfo::GetSystemPatchesInfo (void) const { return m_SystemPatchesArr; } void CSoftInfo::GetSystemPatchesName (std::vector<LPCTSTR>& lpszSoftName) { std::vector<SoftInfo>::iterator iter; for (iter = m_SystemPatchesArr.begin(); iter != m_SystemPatchesArr.end(); iter++) { lpszSoftName.push_back(iter->m_strSoftName); } }
相关文章推荐
- C++访问注册表获取已安装软件信息列表示例代码
- C++访问注册表获取已安装软件信息列表示例代码
- 利用C#访问注册表获取软件的安装路径
- Windows下C编程获取软件安装列表信息
- 通过注册表获取某款软件的信息
- c#获取软件在注册表中的安装信息
- 获取软件在注册表的安装信息
- 通过访问注册表来获取已安装程序的名称
- 获取软件在注册表的安装信息
- 1.python获取windows软件安装列表
- 不通过注册表获取运营商,系列号等信息(ExTAPI)
- C++ 中通过GetAdaptersInfo获取网卡配置和Ip地址信息
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
- 在C#中如何获取系统中所安装的所有软件信息,还有如何打开系统中某个程序
- C#读取注册表,获取本机安装的软件清单
- C#通过windows注册表获取软件清单的方法
- [置顶] Android中高仿快牙实现Socket列表的展示,获取安卓手机系统安装的应用和自己安装的应用相关信息
- android:获取已经安装软件列表 .
- 获取本机已安装的软件列表C#/VB.NET(Get the list of installed software in local pc)
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息