亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++訪問注冊表獲取已安裝軟件信息列表示例代碼

2020-01-26 15:41:28
字體:
來源:轉載
供稿:網友



復制代碼 代碼如下:

// ---------------------------------------------------------------
// 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("http://") + 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);
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩大陆毛片av| 精品久久香蕉国产线看观看亚洲| 欧美大片在线看免费观看| 亚洲www在线| 国产成人自拍视频在线观看| 欧美大奶子在线| 精品国产老师黑色丝袜高跟鞋| 亚洲一区二区三区777| 亚州欧美日韩中文视频| 欧美激情乱人伦| 亚洲黄页网在线观看| 九九综合九九综合| 亚洲免费视频网站| 亚洲在线观看视频网站| 在线观看成人黄色| 亚洲精品小视频在线观看| 成人字幕网zmw| 亚洲色图18p| 日韩精品中文字幕在线观看| 亚洲欧美精品一区| 亚洲日本aⅴ片在线观看香蕉| 国模吧一区二区三区| 国产91精品高潮白浆喷水| 亚洲欧美三级伦理| 久久九九精品99国产精品| 亚洲女同精品视频| 欧美在线观看网址综合| 51视频国产精品一区二区| 欧美日韩国产限制| 色综合亚洲精品激情狠狠| 欧美精品福利在线| 97精品国产97久久久久久免费| 久久久国产精品免费| 亚洲国产99精品国自产| 美女性感视频久久久| 欧美孕妇与黑人孕交| 国产精品入口夜色视频大尺度| 成人福利网站在线观看| 在线播放精品一区二区三区| 成人激情电影一区二区| 日韩av快播网址| 4k岛国日韩精品**专区| 国产精品视频999| 久久久久久亚洲精品不卡| 亚洲天堂av在线免费观看| 国产精品欧美亚洲777777| 国模吧一区二区| 91色精品视频在线| 欧美高清在线播放| 色先锋资源久久综合5566| 欧美性视频网站| 黄色一区二区在线| 欧美自拍视频在线观看| 911国产网站尤物在线观看| 国产精品第100页| 亚洲欧美一区二区精品久久久| 亚洲女人初尝黑人巨大| 国产日韩在线一区| 精品久久久久久久久久久| 国产精品h在线观看| 色偷偷噜噜噜亚洲男人| 午夜精品视频在线| 国产精品久久久久秋霞鲁丝| 亚洲激情视频在线观看| 亚洲国产私拍精品国模在线观看| 啪一啪鲁一鲁2019在线视频| 国产一区二区三区日韩欧美| 午夜精品一区二区三区在线视频| 毛片精品免费在线观看| 国产精品成av人在线视午夜片| 亚洲一区二区三区成人在线视频精品| 91九色视频导航| 欧美午夜精品久久久久久浪潮| 一区二区在线视频播放| 亚洲欧美中文字幕在线一区| 成人激情视频在线播放| 国产欧洲精品视频| 国产精品 欧美在线| 亚洲精品美女在线观看播放| 亚洲成人在线网| 日韩有码视频在线| 中文字幕欧美视频在线| 久久天堂av综合合色| 在线播放精品一区二区三区| 亚洲一区二区三区四区在线播放| 色偷偷av一区二区三区乱| 国产91在线视频| 久久久久这里只有精品| 精品亚洲一区二区| 在线观看中文字幕亚洲| 亚洲影院高清在线| 国产精品美女久久久久久免费| zzjj国产精品一区二区| 日韩精品在线免费播放| 69久久夜色精品国产7777| 日本欧美国产在线| 欧美黑人性猛交| 久久精品国产免费观看| 上原亚衣av一区二区三区| 亚洲精品国产精品国自产观看浪潮| 欧美激情视频网址| 国产精品日韩电影| 亚洲a在线播放| 欧美成在线视频| 2019中文字幕在线| 亚洲视频在线观看视频| 精品一区二区电影| 国产aⅴ夜夜欢一区二区三区| 久久精品中文字幕一区| 亚洲激情视频在线观看| 奇米四色中文综合久久| 国产日韩欧美夫妻视频在线观看| 欧美一区二粉嫩精品国产一线天| 久久成人18免费网站| 国产精品视频导航| 亚洲第一av网站| 亚洲男女自偷自拍图片另类| 亚洲最大成人免费视频| 亚洲白拍色综合图区| 亚洲国产精品va在线看黑人动漫| 国外色69视频在线观看| 欧美激情按摩在线| 国产又爽又黄的激情精品视频| 亚洲尤物视频网| 色阁综合伊人av| 国产剧情日韩欧美| 中文字幕亚洲一区二区三区五十路| 午夜免费日韩视频| 日本欧美一级片| 欧美成人中文字幕在线| 亚洲欧美中文日韩在线| 国产精品69av| 国产suv精品一区二区| 日韩国产欧美精品一区二区三区| 亚洲天天在线日亚洲洲精| 国产美女久久精品香蕉69| 日韩在线欧美在线| 午夜精品久久17c| 伊是香蕉大人久久| 91国产高清在线| 伊人亚洲福利一区二区三区| 91欧美精品午夜性色福利在线| 欧美日韩在线视频一区| 久久久精品免费| 26uuu久久噜噜噜噜| 国产有码在线一区二区视频| 91精品在线看| 国产精品老女人视频| 国产精品久久久久久婷婷天堂| 欧美激情久久久| 亚洲一区二区三区视频| 成人两性免费视频| 国产91久久婷婷一区二区| 久久频这里精品99香蕉| 国产精品久久久久久久久久新婚| 97国产精品人人爽人人做| 国产精品精品久久久久久| 亚洲欧美精品一区二区| 精品国产依人香蕉在线精品| 国产精品三级美女白浆呻吟| 日韩av理论片| 久久777国产线看观看精品| 日韩国产高清污视频在线观看| 亚洲综合色av|