🗿
[WPF/C#] UWPアプリをsuspendしたりresumeしたりする
もくじ
やりたいこと
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