[BlueLeaf1336]> PROBLEMS> 探求其之壱>
| history | TOP |
2006/02/04:作成
| overview | TOP |
Platform SDKから使えそうなAPIを試していく方法で先に進めます。
| GetProcessIoCounters | TOP |
このAPIで IO_COUNTERS 構造体を仲介に、いくつかのタスクマネージャ情報を取れるようです。IO_COUNTERS 構造体は以下の構成になっています。
どこにも宣言されてない関数でした。多分。勝手に定義を起こした割にはいくつかのプロセスでタスクマネージャと同じ結果を取得することができました。
ただ、ULONGLONG という 64bit符号なし整数 なんていう見たこともない型で構造体が構成されていたので、Int64 (64bit符号あり整数)で手を打ちました。
type
// 本当は ULONGLONG = 64-bit unsigned integer.
ULONGLONG = Int64;
// IO_COUNTERS
_IO_COUNTERS = packed record
ReadOperationCount : ULONGLONG; // I/O読み取り
WriteOperationCount : ULONGLONG; // I/O書き込み
OtherOperationCount : ULONGLONG; // I/Oその他
ReadTransferCount : ULONGLONG; // I/O読み取りバイト数
WriteTransferCount : ULONGLONG; // I/O書き込みバイト数
OtherTransferCount : ULONGLONG; // I/Oその他バイト数
end;
IO_COUNTERS = _IO_COUNTERS;
PIO_COUNTERS = ^_IO_COUNTERS;
TIoCounters = _IO_COUNTERS;
PIoCounters = ^_IO_COUNTERS;
// GetProcessIoCounters(本当はレイトバインディングすべき)
function GetProcessIoCounters(
hProcess: THandle;
lpIoCounters: PIoCounters
): Boolean stdcall; external 'Kernel32.DLL' name 'GetProcessIoCounters';
| GetProcessHandleCount | TOP |
このAPIで、プロセスが開いているハンドルの数を取得できるようです。ただ注意書きに
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0501 or later.
という理解できない一文がありますがどうしようもないので、見なかったことにします。
// GetProcessHandleCount
function GetProcessHandleCount(
hProcess: THandle;
pdwHandleCount: PDWORD
): Boolean stdcall; external 'Kernel32.DLL' name 'GetProcessHandleCount';
| GetProcessTimes | TOP |
このAPIで、プロセスが起動してから使用した時間を取得できるようです。ただし、これがタスクマネージャでいうところのCPU時間かどうかはわからないし、多分違います。でも、そろそろ使えそうなAPIがなくなってきたようなので、これもいっときます。
違ってました。ただ、何らかの関係はありそうですが...
| 進捗状況 | TOP |
今のところ、チェックの入っているデータまで取れてます。少しだけ増えました。
20060204TaskMan.zip(6,608bytes) ソースコードと実行ファイルです。
| EOF | TOP |