[BlueLeaf1336]> PROBLEMS> 探求其之壱>

探求其之壱 > プロセス情報の取得

historyTOP

2006/02/04:作成

overviewTOP

Platform SDKから使えそうなAPIを試していく方法で先に進めます。

GetProcessIoCountersTOP

この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';

GetProcessHandleCountTOP

この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';

GetProcessTimesTOP

このAPIで、プロセスが起動してから使用した時間を取得できるようです。ただし、これがタスクマネージャでいうところのCPU時間かどうかはわからないし、多分違います。でも、そろそろ使えそうなAPIがなくなってきたようなので、これもいっときます。

違ってました。ただ、何らかの関係はありそうですが...

進捗状況TOP

今のところ、チェックの入っているデータまで取れてます。少しだけ増えました。

20060204TaskMan.zip(6,608bytes) ソースコードと実行ファイルです。

EOFTOP