🗿
[WPF/C#] UWPアプリの一覧とアプリの詳細を表示する
もくじ
やりたいこと
UWPのAPIを使って、UWPアプリの一覧と、アプリの情報の詳細をとりたい。
情報の詳細というのは、
以前の記事(UWPアプリの一覧とアプリの概要を表示する)の情報に加え、
- アプリに属するプロセスの
- CPU時間
- メモリ使用量(Workingset)
- ディスク使用量(RWバイト数/RWの数)
の情報をとるイメージ。
やり方
- ProcessDiagnosticInfo
の中の
- CpuUsage
- MemoryUsage
あたりのUWPのAPIを使う。
必要nugetライブラリ
Microsoft.Windows.SDK.Contracts
(今回は10.0.19041.1を使用)
サンプルコード
foreach (ProcessDiagnosticInfo process in processes)
のループの中身以外は、前回の記事と同じ内容。
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)
{
var cpu = process.CpuUsage.GetReport();
var cputime = cpu.UserTime + cpu.KernelTime;
var memory = process.MemoryUsage.GetReport();
var workingset = memory.WorkingSetSizeInBytes;
var disk = process.DiskUsage.GetReport();
var rwBytes = disk.BytesWrittenCount + disk.BytesReadCount;
Console.WriteLine(" pid: {0}, exeName : {1}, IsPackaged : {2}, cpuTime : {3}, workingSet : {4}, diskRW : {5}", process.ProcessId, process.ExecutableFileName, process.IsPackaged, cputime, workingset, rwBytes);
}
}
}
}
}
}
Thread.Sleep(5000);
}
}
}
}
参考
MSのサンプル
(UWPの一覧を表示するアプリ。UWP版のタスクマネージャみたいなもの)
Discussion