[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 |