如何在C++/Rust中获取UWP应用程序的图标?

问题描述 投票:0回答:1

我正在寻找 C++ 或 Rust 语言的 UWP/Windows 商店应用程序的(主)图标。 (使用 Windows API)

我有所有这些可用的 ID(例如 Slack):

System.AppUserModel.ID
91750D7E.Slack_8she8kybcnzg4!Slack

System.AppUserModel.PackageFamilyName
91750D7E.Slack_8she8kybcnzg4

System.AppUserModel.PackageFullName
91750D7E.Slack_4.33.73.0_x64__8she8kybcnzg4

System.AppUserModel.TileUniqueId
{AFFCE86E-C26B-4855-83E5-CDAB2333488B}

我只想检索 HICON、HBITMAP、png 路径等。 (最终目标是将其转换为 Base64)

有人能指出我正确的方向吗?也许我错过了一个 Windows 函数来做到这一点?

我已经尝试了 Windows API 中的所有这些功能,但似乎没有一个适用于此用例:

  • ExtractIconExW
  • ExtractAssociatedIconW
  • SHCreateItemFromParsingName
    然后
    GetImage
    IShellItemImageFactory
  • SHGetFileInfoW
c++ windows rust uwp icons
1个回答
0
投票

好吧,我找到了一种获取徽标 URI 的方法,这是 Rust 中的代码:

let app_full_name = r"Microsoft.WindowsCalculator_11.2210.0.0_x64__8wekyb3d8bbwe";

let package_manager = PackageManager::new().unwrap();
let package = package_manager.FindPackageByPackageFullName(&HSTRING::from(app_full_name));
let logoUri = package.unwrap().Logo().unwrap().AbsoluteUri();

println!("{:?}", logoUri);
// Ok("file:///C:/Program%20Files/WindowsApps/Microsoft.WindowsCalculator_11.2210.0.0_neutral_split.scale-100_8wekyb3d8bbwe/Assets/CalculatorStoreLogo.scale-100.png")

但是它需要管理员权限,这对于仅仅获取文件路径来说有点太多了......

因此,如果有人有一个不需要管理员权限的解决方案,那就太棒了!

© www.soinside.com 2019 - 2024. All rights reserved.