🗿
[WPF/C#] UWPアプリの一覧とアプリの概要を表示する
もくじ
やりたいこと
UWPのAPIを使って、UWPアプリの一覧と、アプリの情報の概要をとりたい。
情報の概要というのは、
- アプリ名
- AumID
- アプリの状態(Running/Suspendなど)
- アプリに属するプロセスの一覧
- pid
- exe名
のようなイメージ。
やり方
- AppDiagnosticInfo
- AppResourceGroupInfo
- ProcessDiagnosticInfo
あたりのUWPのAPIを使う。
必要nugetライブラリ
Microsoft.Windows.SDK.Contracts
(今回は10.0.19041.1を使用)
サンプルコード
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)
{
Console.Clear();
// アプリの診断情報を取得
var infoOperation = AppDiagnosticInfo.RequestInfoAsync();
var infoTask = infoOperation.AsTask();
infoTask.Wait();
var uwpApps = infoTask.Result;// UWPアプリの一覧
if (uwpApps != null)
{
foreach (AppDiagnosticInfo app in uwpApps)
{
Console.WriteLine("app: {0}, AumId: {1}", app.AppInfo.DisplayInfo.DisplayName, app.AppInfo.AppUserModelId);
// アプリのリソースグループを取得(メモリ使用量、エネルギー使用量など)
// ※Listが取れるが、どういうときにリストに2つ以上のAppResourceGroupInfoが入るかは不明...
IList<AppResourceGroupInfo> groups = app.GetResourceGroups();
if (groups != null)
{
foreach (AppResourceGroupInfo group in groups)
{
var state = group.GetStateReport();
Console.WriteLine(" executeStatus : {0}, EnergyQuotaState : {1}", state.ExecutionState, state.EnergyQuotaState);
// アプリに属するプロセスの情報を取得(PID、CPU時間、メモリ使用量など)
IList<ProcessDiagnosticInfo> processes = group.GetProcessDiagnosticInfos();
if (processes != null)
{
foreach (ProcessDiagnosticInfo process in processes)
{
Console.WriteLine(" pid: {0}, exeName : {1}, IsPackaged : {2}", process.ProcessId, process.ExecutableFileName, process.IsPackaged);
}
}
}
}
}
}
Thread.Sleep(5000);
}
}
}
}
参考
MSのサンプル
(UWPの一覧を表示するアプリ。UWP版のタスクマネージャみたいなもの)
Discussion