Example #1
0
        /// <summary>現ユーザーにインストールされているuwpアプリを列挙する</summary>
        /// <typeparam name="T">ロゴ画像の型</typeparam>
        /// <param name="stream2Logo">ストリームから画像を生成するデリゲート</param>
        /// <returns>アプリ情報</returns>
        public static async IAsyncEnumerable <AppListEntryEx <T> > EnumerateAsync <T>(Func <Stream, string, T> stream2Logo) where T : class
        {
            // AppListEntryが複数あった場合 同一PackageがAppListEntry分列挙される模様
            // カレンダーとメール等
            // アプリ単位で列挙されたほうが嬉しいのでAppListEntry単位にしている
            var packages = new PackageManager().FindPackagesForUser("").Distinct();

            foreach (var package in packages)
            {
                var ex = new PackageEx(package);

                foreach (var entry in await package.GetAppListEntriesAsync())
                {
                    AppListEntryEx <T> result;
                    try
                    {
                        result = await AppListEntryEx <T> .CreateInstanceAsync(ex, entry, stream2Logo);
                    }
                    catch
                    {
                        continue;
                    }

                    yield return(result);
                }
            }
        }
        internal static async Task <AppListEntryEx <T> > CreateInstanceAsync(PackageEx package, AppListEntry appListEntry, Func <Stream, string, T> stream2Logo)
        {
            var entry = new AppListEntryEx <T>(package, appListEntry);
            await entry.InitializeAsync(stream2Logo);

            return(entry);
        }
        private (string?backgroundColor, string?square44x44Logo) GetVisualElements(PackageEx package, string appId)
        {
            if (package.InstalledLocation != null)
            {
                var manifestPath = Path.Combine(package.InstalledLocation, "AppxManifest.xml");
                var xml          = XDocument.Load(manifestPath);

                var applications    = xml.ElementAnyNS("Package")?.ElementAnyNS("Applications");
                var applicationList = applications?.ElementsAnyNS("Application");
                if (applicationList != null)
                {
                    var e  = applicationList.FirstOrDefault(x => x.AttributeAnyNS("Id")?.Value == appId);
                    var bk = e.ElementAnyNS("VisualElements")?.AttributeAnyNS("BackgroundColor")?.Value;
                    var sl = e.ElementAnyNS("VisualElements")?.AttributeAnyNS("Square44x44Logo")?.Value;
                    return(bk, sl);
                }
            }

            return(null, null);
        }
 private AppListEntryEx(PackageEx package, AppListEntry appListEntry)
 {
     Package           = package;
     AppUserModelId    = appListEntry.AppUserModelId;
     this.appListEntry = appListEntry;
 }