c 语言读取注册表信息,C++访问注册表获取已安装软件信息列表示例代码

// 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 CSoftInfo::GetSoftInfo (void) const

{

return m_SoftInfoArr;

}

void CSoftInfo::GetSoftName (std::vector& lpszSoftName)

{

std::vector::iterator iter;

for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++)

{

lpszSoftName.push_back(iter->m_strSoftName);

}

}

void CSoftInfo::GetSoftVersion (std::vector& lpszSoftVersion)

{

std::vector::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& lpszInstallLocation)

{

std::vector::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& lpszPublisher)

{

std::vector::iterator iter;

bool bSign;

for (iter = m_SoftInfoArr.begin(); iter != m_SoftInfoArr.end(); iter++)

{

bSign = true;

// 初步去重复厂商

std::vector::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& lpszMainProPath)

{

std::vector::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& lpszSoftName)

{

std::vector::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 CSoftInfo::GetSystemPatchesInfo (void) const

{

return m_SystemPatchesArr;

}

void CSoftInfo::GetSystemPatchesName (std::vector& lpszSoftName)

{

std::vector::iterator iter;

for (iter = m_SystemPatchesArr.begin(); iter != m_SystemPatchesArr.end(); iter++)

{

lpszSoftName.push_back(iter->m_strSoftName);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值