2016-07-22 14 views
1

Я использую класс PackageManager для отображения установленных приложений в стиле метро.Получение точного отображаемого имени приложений в стиле метро

PackageId.Name не возвращает фактическое название упаковки, равно Package.DisplayName. Package.DisplayName возвращает пустую строку. Он возвращает отображаемое имя только для Package.Current.

Когда я попытался использовать AppxManifest.xml, я не смог получить отображаемое имя от
Package-> Properties-> Displayname.

<Properties> 
<DisplayName>ms-resource:///Resources/AppStoreName</DisplayName> 
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName> 
<Logo>Assets\WindowsIcons\StoreLogo.png</Logo> 
</Properties> 

Где я могу получить точное отображаемое название приложений в стиле метро?

ответ

0

Если у вас уже есть ссылка на экземпляр Package, вы можете получить отображаемое имя с помощью метода взаимодействия и реестра. Вот полный пример:

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" + 
      [email protected]"\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(); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^