获取已经安装软件列表
来源:互联网 发布:人工智能主题的基金 编辑:程序博客网 时间:2024/04/28 13:42
#include <stdio.h>#include <tchar.h>#include <windows.h>#include <shlobj.h>#include <shappmgr.h>DECLARE_INTERFACE_(IInstalledApp, IUnknown) { BEGIN_INTERFACE virtual HRESULT (STDMETHODCALLTYPE GetAppInfo)(PAPPINFODATA pai); virtual HRESULT (STDMETHODCALLTYPE GetPossibleActions)(DWORD *pdwActions); virtual HRESULT (STDMETHODCALLTYPE GetSlowAppInfo)(PSLOWAPPINFO psaid); virtual HRESULT (STDMETHODCALLTYPE GetCachedSlowAppInfo)(PSLOWAPPINFO psaid); virtual HRESULT (STDMETHODCALLTYPE IsInstalled)(void); virtual HRESULT (STDMETHODCALLTYPE Uninstall)(HWND hwnd); virtual HRESULT (STDMETHODCALLTYPE Modify)(HWND hwndParent); virtual HRESULT (STDMETHODCALLTYPE Repair)(BOOL bReinstall); virtual HRESULT (STDMETHODCALLTYPE Upgrade)(void); END_INTERFACE};DECLARE_INTERFACE_(IEnumInstalledApps, IUnknown) { BEGIN_INTERFACE virtual HRESULT (STDMETHODCALLTYPE Next)(IInstalledApp **pia); virtual HRESULT (STDMETHODCALLTYPE Reset)(void); END_INTERFACE};typedef struct { LPWSTR pszCategory; UINT idCategory;} SHELLAPPCATEGORY, *PSHELLAPPCATEGORY;typedef struct { UINT cCategories; SHELLAPPCATEGORY *pCategory;} SHELLAPPCATEGORYLIST, *PSHELLAPPCATEGORYLIST;DECLARE_INTERFACE_(IShellAppManager, IUnknown) { BEGIN_INTERFACE virtual HRESULT (STDMETHODCALLTYPE GetNumberofInstalledApps)(DWORD *pdwResult); virtual HRESULT (STDMETHODCALLTYPE EnumInstalledApps)(IEnumInstalledApps **peia); virtual HRESULT (STDMETHODCALLTYPE GetPublishedAppCategories)(PSHELLAPPCATEGORYLIST pCategoryList); virtual HRESULT (STDMETHODCALLTYPE EnumPublishedApps)(LPCWSTR pszCategory, IEnumPublishedApps **ppepa); virtual HRESULT (STDMETHODCALLTYPE InstallFromFloppyOrCDROM)(HWND hwndParent); END_INTERFACE};const GUID CLSID_ShellAppManager = { 0x352EC2B7, 0x8B9A, 0x11D1, 0xB8,0xAE,0x00,0x60,0x08,0x05,0x93,0x82 };// Windows 2k/XPconst GUID IID_IShellAppManager5 = { 0x352EC2B8, 0x8B9A, 0x11D1, 0xB8,0xAE,0x00,0x60,0x08,0x05,0x93,0x82 };// Windows Vista/7const GUID IID_IShellAppManager6 = { 0xC257690D, 0x85DE, 0x417C, 0xB9,0x64,0xC2,0x2B,0x1A,0x6B,0xB5,0xF7 };/* main */int main(int argc, char *argv[]){ HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { IShellAppManager *pisham = NULL; // 根据系统版本选用适合的 IID_IShellAppManager 值 hr = CoCreateInstance(CLSID_ShellAppManager, NULL, CLSCTX_INPROC_SERVER, IID_IShellAppManager6, (void **)&pisham); if (SUCCEEDED(hr)) { IEnumInstalledApps *pieia = NULL; hr = pisham->EnumInstalledApps(&pieia); if (SUCCEEDED(hr)) { IInstalledApp *piia = NULL; while (SUCCEEDED(pieia->Next(&piia)) && piia != NULL) { APPINFODATA appinfo; appinfo.cbSize = sizeof(APPINFODATA); appinfo.dwMask = AIM_DISPLAYNAME | AIM_VERSION | AIM_PUBLISHER | AIM_PRODUCTID; hr = piia->GetAppInfo(&appinfo); if (SUCCEEDED(hr)) { // appinfo 可用的值取决于 dwMask 的标志位 // appinfo.pszDisplayName 显示名称 char szInfo[256]; WideCharToMultiByte(CP_ACP, 0, appinfo.pszDisplayName, -1, szInfo, 256, NULL, NULL); puts(szInfo); } piia->Release(); piia = NULL; } pieia->Release(); } pisham->Release(); } CoUninitialize(); } return 0;}
缺失的部分是 msi 安装包,这些包并不出现在 Uninstall 这个键值下面,只能用 MsiEnumProducts、MsiGetPatchInfo 系列的函数来取得这些软件包的信息。它们记录在注册表 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products 下面。
http://bbs.csdn.net/topics/390710564
0 0
- 获取已经安装软件列表
- android:获取已经安装软件列表
- android:获取已经安装软件列表 .
- java查询已经安装的软件列表
- 获取iPhone已经安装程序列表
- Android 中获取已经安装的应用列表
- SQLGetInstalledDrivers 获取ODBC已经安装的驱动列表
- C# 获取本地安装的软件列表
- Linux Deepin怎样用终端查看已经安装的软件列表及卸载软件
- 取得已经安装程序列表
- Windows mobile 判断应用程序是否安装,获取已经安装的应用程序列表
- C++通过访问注册表获取已安装软件信息列表
- 获取手机已安装应软件的列表
- Android获取安装软件列表并启动某个app
- PowerShell快速高效地获取安装的软件列表
- 【资源列表】安装软件列表
- iOS 获取已经安装应用
- 新机安装软件列表
- 关于项目的风险控制
- 普通Java工程转换成maven工程
- SOJ.分数排名查询
- CSDN-MarkDown编辑器使用手册(4)--- 数学公式
- msql 导出
- 获取已经安装软件列表
- 过却三世又一生
- Java多线程银行存取款程序
- Storm开发打包问题:Ant编译把第三方jar打入打包的JAR中
- 在centos中安装jenkins master测试环境
- 页面中调用函数--之${fn:}内置函数
- 哪家嘛动漫什么呢
- Enum枚举序列化JSON value to string问题
- hdu 5011(博弈)