C++访问注册表获取已安装软件信息列表示例代码
来源:互联网 发布:mongodb python 教程 编辑:程序博客网 时间:2024/05/20 19:18
C++访问注册表获取已安装软件信息列表示例代码
http://www.jb51.net/article/43663.htm
// ---------------------------------------------------------------// 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); }}
1 0
- C++访问注册表获取已安装软件信息列表示例代码
- C++通过访问注册表获取已安装软件信息列表
- 获取软件在注册表的安装信息
- 通过访问注册表来获取已安装程序的名称
- VC++获取Windows已安装软件——注册表方式
- VC 获取Windows已安装软件(注册表方式)
- VC 获取Windows已安装软件(注册表方式)
- c#获取软件在注册表中的安装信息
- 利用C#访问注册表获取软件的安装路径
- 获取所有已安装软件以及获取应用程序版本信息
- 获取手机已安装应软件的列表
- 注册表---查询已安装的软件
- python从注册表中获取win7屏保相关信息和已安装程序
- 获取已安装应用列表
- 获取已安装应用列表
- android获取已安装应用信息(列表图标包名列表)
- 获取已安装应用信息
- C/C++新建注册表项【代码示例】
- mongo的使用
- 数据结构-插入排序InsertSort
- python时间,日期,时间戳处理
- 1030. 完美数列(25)
- 计蒜客 三值排序(贪心)
- C++访问注册表获取已安装软件信息列表示例代码
- 1031. 查验身份证(15)
- HDU
- 1032. 挖掘机技术哪家强(20)
- swift中枚举的定义以及调用传值的小功能,
- java——io流FileWriter和FileReader
- 耳机串音问题解决(crosstalk)
- 1033. 旧键盘打字(20)
- (转)外边合并问题