🗿

[WPF/C#] UWPアプリをsuspendしたりresumeしたりする

2021/08/06に公開

もくじ

https://qiita.com/tera1707/items/4fda73d86eded283ec4f

やりたいこと

UWPのAPIを使って、UWPアプリの一覧を取得し、取得したアプリをsuspendにしたり、resumeしたりしたい。

やり方

AppResourceGroupInfoを取ってから、その中のStartSuspendAsync()StartResumeAsync()を使う。

using System;
using System.Collections.Generic;
using System.Threading;
using Windows.System;
using Windows.System.Diagnostics;

namespace ProcessListUpByUwpApi
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                var ctr = 0;
                var appInfos = new List<(AppDiagnosticInfo appInfo, AppResourceGroupInfo groupInfo)>();

                // アプリの診断情報を取得
                var infoOperation = AppDiagnosticInfo.RequestInfoAsync();
                var infoTask = infoOperation.AsTask();
                infoTask.Wait();
                var uwpApps = infoTask.Result;// UWPアプリの一覧

                if (uwpApps != null)
                {
                    foreach (AppDiagnosticInfo app in uwpApps)
                    {

                        // アプリのリソースグループを取得(メモリ使用量、エネルギー使用量など)
                        // ※Listが取れるが、どういうときにリストに2つ以上のAppResourceGroupInfoが入るかは不明...
                        IList<AppResourceGroupInfo> groups = app.GetResourceGroups();
                        if (groups != null)
                        {
                            foreach (AppResourceGroupInfo group in groups)
                            {
                                appInfos.Add((app, group));
                                Console.WriteLine("{0} : app: {1}", ctr++, app.AppInfo.DisplayInfo.DisplayName);
                            }
                        }
                    }
                }

                Console.WriteLine("どのアプリのステータスを変えますか?");
                var cmd = Console.ReadLine();
                var cmdint = int.Parse(cmd);
                var target = appInfos[cmdint];

                Console.WriteLine("どう変えますか?");
                Console.WriteLine("0 : suspendにする  1 : resumeする");
                cmd = Console.ReadLine();
                cmdint = int.Parse(cmd);

                // コマンド実施
                if (cmdint <= 0)
                {
                    // suspend
                    target.groupInfo.StartSuspendAsync().AsTask().Wait();
                }
                else
                {
                    // runnning
                    target.groupInfo.StartResumeAsync().AsTask().Wait();
                }

                //Console.WriteLine("期待通りになりましたか?");
                //Console.ReadLine();
                Console.Clear();
            }
        }
    }
}

Discussion