获取metro风格应用程序的确切显示名称
本文关键字:显示 metro 风格 应用程序 获取 | 更新日期: 2023-09-27 17:58:15
我正在使用PackageManager类来列出系统中已安装的metro风格的应用程序。
PackageId。Name不返回包的实际名称,package也不返回。DisplayName。包裹DisplayName返回空字符串。它只返回Package的显示名称。现在的
当我尝试使用AppxManifest.xml时,无法从
获取显示名称软件包->属性->显示名称。
<Properties>
<DisplayName>ms-resource:///Resources/AppStoreName</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>Assets'WindowsIcons'StoreLogo.png</Logo>
</Properties>
在哪里可以获得metro风格应用程序的确切显示名称?
如果您已经有对Package
实例的引用,则可以使用interop方法和注册表获取显示名称。这里有一个完整的例子:
using Microsoft.Win32;
using System;
using System.Runtime.InteropServices;
using System.Text;
using Windows.ApplicationModel;
public class PackageUtil
{
[DllImport("shlwapi.dll", BestFitMapping = false, CharSet = CharSet.Unicode,
ExactSpelling = true, SetLastError = false, ThrowOnUnmappableChar = true)]
private static extern int SHLoadIndirectString(string pszSource,
StringBuilder pszOutBuf, int cchOutBuf, IntPtr ppvReserved);
private static string GetPackageDisplayName(Package package)
{
using (var key = Registry.ClassesRoot.OpenSubKey(
@"Local Settings'Software'Microsoft'Windows'CurrentVersion'AppModel" +
$@"'Repository'Packages'{package.Id.FullName}'App'Capabilities"))
{
var sb = new StringBuilder(256);
Shlwapi.SHLoadIndirectString((string)key.GetValue("ApplicationName"),
sb, sb.Capacity, IntPtr.Zero);
return sb.ToString();
}
}
}