HRESULT AudioSessionService::GetAppProperties(PCWSTR pszAppId, PWSTR* ppszName, PWSTR* ppszIcon, ULONG *background) { *ppszIcon = nullptr; *ppszName = nullptr; *background = 0; CComPtr<IShellItem2> item; FAST_FAIL(SHCreateItemInKnownFolder(FOLDERID_AppsFolder, KF_FLAG_DONT_VERIFY, pszAppId, IID_PPV_ARGS(&item))); CComHeapPtr<wchar_t> itemName; FAST_FAIL(item->GetString(PKEY_ItemNameDisplay, &itemName)); FAST_FAIL(item->GetUInt32(PKEY_AppUserModel_Background, background)); CComHeapPtr<wchar_t> installPath; FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageInstallPath, &installPath)); CComHeapPtr<wchar_t> iconPath; FAST_FAIL(item->GetString(PKEY_AppUserModel_Icon, &iconPath)); wchar_t fullPath[MAX_PATH] = {}; FAST_FAIL(PathCchCombine(fullPath, ARRAYSIZE(fullPath), installPath, iconPath)); CStringW path(fullPath); if (!PathFileExists(path)) { path.Replace(L".png", L".scale-100.png"); } FAST_FAIL(SHStrDup(path, ppszIcon)); *ppszName = itemName.Detach(); return S_OK; }
HRESULT AudioSessionService::GetAppProperties(PCWSTR pszAppId, PWSTR* ppszName, PWSTR* ppszIcon, ULONG *background) { *ppszIcon = nullptr; *ppszName = nullptr; *background = 0; CComPtr<IShellItem2> item; FAST_FAIL(SHCreateItemInKnownFolder(FOLDERID_AppsFolder, KF_FLAG_DONT_VERIFY, pszAppId, IID_PPV_ARGS(&item))); CComHeapPtr<wchar_t> itemName; FAST_FAIL(item->GetString(PKEY_ItemNameDisplay, &itemName)); FAST_FAIL(item->GetUInt32(PKEY_AppUserModel_Background, background)); CComHeapPtr<wchar_t> installPath; FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageInstallPath, &installPath)); CComHeapPtr<wchar_t> iconPath; FAST_FAIL(item->GetString(PKEY_AppUserModel_Icon, &iconPath)); CComHeapPtr<wchar_t> fullPackagePath; FAST_FAIL(item->GetString(PKEY_AppUserModel_PackageFullName, &fullPackagePath)); CComPtr<IMrtResourceManager> mrtResMgr; FAST_FAIL(CoCreateInstance(__uuidof(MrtResourceManager), nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&mrtResMgr))); FAST_FAIL(mrtResMgr->InitializeForPackage(fullPackagePath)); CComPtr<IResourceMap> resourceMap; FAST_FAIL(mrtResMgr->GetMainResourceMap(IID_PPV_ARGS(&resourceMap))); CComHeapPtr<wchar_t> resolvedIconPath; FAST_FAIL(resourceMap->GetFilePath(iconPath, &resolvedIconPath)); *ppszIcon = resolvedIconPath.Detach(); *ppszName = itemName.Detach(); return S_OK; }