Windowsストアアプリ内からこの情報を取得するための「承認された」APIを知りません。
ただし、これをテストアプリでのみ実行する場合は、「未承認」のAPIを使用できます。承認されていないAPIを使用すると、プログラムはWACK認定に合格せず、ストアにアップロードできませんが、ローカルでテストする場合は問題ありません。未承認のAPIを呼び出す場合の保証はないため、動作は正式には定義されていませんが、少なくとも現在のリリースでは、多くの関数が正常に機能することに注意してください。
AllocConsole
今年の夏の初めに書いた記事「Metroスタイルアプリでのprintfデバッグ」を呼び出す方法を示しました。P / Invokeを使用してネイティブ関数を呼び出すか、C#から呼び出すことができるC ++ Windowsランタイムコンポーネントを作成することにより、C#から同様のことを行うことができます。
あなたのシナリオでは、現在のプロセスへのハンドルを取得するために呼び出し、ユーザーとカーネルの時間を取得するためにGetCurrentProcess
それを渡すことをお勧めします。GetProcessTimes
私は簡単なテストを実行し、このアプローチで妥当な結果を得ました。
これは、P / Invokeを使用して呼び出しを行う完全なC#クラスです。
static class DebugProcessTimes
{
[StructLayout(LayoutKind.Sequential)]
private struct FileTime
{
public UInt32 Low;
public UInt32 High;
}
private static UInt64 ToUInt64(FileTime time)
{
return ((UInt64)time.High << 32) + time.Low;
}
[DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentProcess();
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetProcessTimes(
IntPtr hProcess,
out FileTime lpCreationTime,
out FileTime lpExitTime,
out FileTime lpKernelTime,
out FileTime lpUserTime);
public struct ProcessTimes
{
public UInt64 CreationTime;
public UInt64 ExitTime;
public UInt64 KernelTime;
public UInt64 UserTime;
}
public static ProcessTimes GetProcessTimes()
{
FileTime creation, exit, kernel, user;
if (!GetProcessTimes(GetCurrentProcess(),
out creation, out exit, out kernel, out user))
throw new Exception(":'(");
return new ProcessTimes
{
CreationTime = ToUInt64(creation),
ExitTime = ToUInt64(exit),
KernelTime = ToUInt64(kernel),
UserTime = ToUInt64(user)
};
}
}
使用法:
var times = DebugProcessTimes.GetProcessTimes();