21xrx.com
2025-03-25 01:29:56 Tuesday
文章检索 我的文章 写文章
C++获取用户已安装软件
2023-06-30 15:14:29 深夜i     24     0
C++ 获取 用户 已安装 软件

C++是一种高级的编程语言,使用它可以实现许多有趣的功能。本文将介绍如何使用C++来获取用户已安装的软件信息。

C++中有一个Windows API函数叫做EnumDisplayDevices,可以用来获取计算机中的设备信息,包括显示设备、打印机、音频设备等。同样地,我们可以使用该函数获取计算机中已安装的软件信息。

首先,我们需要定义一个结构体来存储软件信息,包括软件名称、版本号、安装路径等。代码如下:

typedef struct _SOFTWARE_INFO {
  TCHAR szName[MAX_PATH];
  TCHAR szVersion[MAX_PATH];
  TCHAR szInstallPath[MAX_PATH];
} SOFTWARE_INFO;

接下来,我们定义一个枚举函数来获取软件信息。代码如下:

DWORD EnumSoftwares(SOFTWARE_INFO* pInfo) {
  DWORD dwIndex = 0;
  HKEY hKey;
  TCHAR szKeyName[MAX_PATH], szSubKeyName[MAX_PATH];
  DWORD dwNameSize = MAX_PATH;
  DWORD dwType = REG_SZ;
  TCHAR szName[MAX_PATH], szVersion[MAX_PATH], szInstallPath[MAX_PATH];
  DWORD dwDataSize = MAX_PATH;
  pInfo->szName[0] = '\0';
  pInfo->szVersion[0] = '\0';
  pInfo->szInstallPath[0] = '\0';
  while (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), 0, KEY_READ, &hKey)) {
    if (RegEnumKeyEx(hKey, dwIndex++, szKeyName, &dwNameSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
      _stprintf_s(szSubKeyName, MAX_PATH, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%s"), szKeyName);
      if (RegQueryValueEx(hKey, _T("DisplayName"), NULL, &dwType, (LPBYTE)szName, &dwDataSize) == ERROR_SUCCESS) {
        dwDataSize = MAX_PATH;
        if (RegQueryValueEx(hKey, _T("DisplayVersion"), NULL, &dwType, (LPBYTE)szVersion, &dwDataSize) == ERROR_SUCCESS) {
          dwDataSize = MAX_PATH;
          if (RegQueryValueEx(hKey, _T("InstallLocation"), NULL, &dwType, (LPBYTE)szInstallPath, &dwDataSize) == ERROR_SUCCESS) {
            _tcscpy_s(pInfo->szName, MAX_PATH, szName);
            _tcscpy_s(pInfo->szVersion, MAX_PATH, szVersion);
            _tcscpy_s(pInfo->szInstallPath, MAX_PATH, szInstallPath);
            RegCloseKey(hKey);
            return ERROR_SUCCESS;
          }
        }
      }
    } else
      break;
    
    dwNameSize = MAX_PATH;
  }
  RegCloseKey(hKey);
  return ERROR_NO_MORE_ITEMS;
}

最后,我们可以在主函数中调用这个枚举函数来获取计算机中已安装的软件信息。代码如下:

int main() {
  SOFTWARE_INFO info;
  while (EnumSoftwares(&info) == ERROR_SUCCESS) {
    _tprintf_s(_T("%s (%s): %s\n"), info.szName, info.szVersion, info.szInstallPath);
  }
  return 0;
}

运行上述代码,就可以得到计算机中所有已安装软件的名称、版本号和安装路径了。

在这里,我们介绍了如何使用C++来获取用户已安装的软件信息。这是一个有用的功能,可以帮助我们了解计算机中安装了哪些软件,从而更好地维护计算机的健康。

  
  

评论区