函数打开注册表,获得安装软件的信息
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);
}
}
这段代码是用函数打开注册表,获取相应的信息
用命令的话可以用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);
}
}
相关文章推荐
- 获取软件在注册表的安装信息
- 在C#中如何获取系统中所安装的所有软件信息,还有如何打开系统中某个程序
- asreml安装Linux服务器版时获得硬件和软件信息
- 获取软件在注册表的安装信息
- C++访问注册表获取已安装软件信息列表示例代码
- c#获取软件在注册表中的安装信息
- C++通过访问注册表获取已安装软件信息列表
- 获得已安装软件的签名信息
- C# 判断本机是否安装Excel及多版本安装?获取Excel进程信息和打开Excel应用软件
- C#读取注册表获得安装的软件
- C++访问注册表获取已安装软件信息列表示例代码
- C# 判断本机是否安装Excel及多版本安装?获取Excel进程信息和打开Excel应用软件
- batch语言安装打开软件,注册表的操作
- linux 查看系统信息的一些命令及查看已安装软件包的命令
- Linux查看系统信息的一些命令及查看已安装软件包的命令
- vc++怎么删除软件注册表信息
- 使用WINPCAP获得已安装网卡的详细信息
- 操作注册表的API函数介绍(RegOpenKeyEx:该函数用来打开特定的注册表键)
- Linux查看系统信息的一些命令及查看已安装软件包的命令
- C#读取注册表,获取本机安装的软件清单