您的位置:首页 > 其它

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

2013-03-25 12:44 393 查看
注册的信息,可以用函数打开,也可以命令获取注册表的信息

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

用命令的话可以用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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: