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

5anewei6  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(138)

我希望得到一个UWP/Windows商店应用程序在C++或Rust的(主)图标。(使用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中的所有这些函数,但它们似乎都不适用于此用例:

  • 第一个月
  • ExtractAssociatedIconW
  • SHCreateItemFromParsingName然后GetImageIShellItemImageFactory
  • SHGetFileInfoW
nqwrtyyt

nqwrtyyt1#

好了,我找到了一种获取logo 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")

字符串
但它需要管理员权限,这对于仅仅获取文件路径来说有点太多了...
因此,如果有人有一个解决方案,不需要管理员权限,那将是可怕的!
编辑:好的,显然,我只需要使用FindPackageByUserSecurityIdPackageFullName方法代替,SID为空:

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

相关问题