プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

プロセス情報の一覧

2007年10月03日 10時26分37秒 | パフォーマンス関連

プロセス情報を取得するにはProcess32First()Process32Next()関数を使います。
手順は次のようになります。(戻る)

  1. プロセス情報を含むスナップショットを作成(CreateToolhelp32Snapshot)
  2. 最初のモジュール情報を取得(Process32First)
  3. 続きのモジュール情報を取得(Process32Next)
  4. スナップショットを破棄(CloseHandle)

プロトタイプ宣言

BOOL Process32First(
    HANDLE hSnapshot,        // スナップショットのハンドル
    LPPROCESSENTRY32 lppe  // プロセス情報の格納構造体
);

BOOL Process32Next(
    HANDLE hSnapshot,        // スナップショットのハンドル
    LPPROCESSENTRY32 lppe  // プロセス情報の格納構造体
);

構造体

typedef struct tagPROCESSENTRY32 {
    DWORD       dwSize;                 // 構造体のサイズ
    DWORD       cntUsage;               // プロセスの参照カウント数
    DWORD       th32ProcessID;          // プロセスID
    ULONG_PTR   th32DefaultHeapID;      // デフォルトのヒープID
    DWORD       th32ModuleID;           // モジュールID
    DWORD       cntThreads;             // スレッド数
    DWORD       th32ParentProcessID;    // 親プロセスID
    LONG        pcPriClassBase;         // 基本優先順位レベル
    DWORD       dwFlags;                // フラグ(未使用:常に0)
    CHAR        szExeFile[ MAX_PATH ];   // ファイル名(実行モジュール名)
} PROCESSENTRY32, *LPPROCESSENTRY32;

サンプル

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

// メイン関数
int main( void )
{
    static LPCTSTR Msg[] = {
        TEXT(" No. [szExeFile                     ] ")
        TEXT(" Usage Thread PareID ProcID HeapID ModuID Priori  dwFlags\n"),
        
        TEXT("---- -------------------------------- ")
        TEXT("------ ------ ------ ------ ------ ------ ------ --------\n"),
    };
    HANDLE hSnapshot;
    INT nCount = 0;
    
    if ( (hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)) != INVALID_HANDLE_VALUE ){
        PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof( PROCESSENTRY32 );
        printf( Msg[0] );
        printf( Msg[1] );
        
        if ( Process32First(hSnapshot,&pe32) ){
            do {
                printf( "%3d: ",        ++nCount );
                printf( "[%-30s] ",     pe32.szExeFile );
                printf( "%6d ",         pe32.cntUsage );
                printf( "%6d ",         pe32.cntThreads );
                printf( "%6d ",         pe32.th32ParentProcessID );
                printf( "%6d ",         pe32.th32ProcessID );
                printf( "%6d ",         pe32.th32DefaultHeapID );
                printf( "%6d ",         pe32.th32ModuleID );
                printf( "%6d ",         pe32.pcPriClassBase );
                printf( "%08X\n",       pe32.dwFlags );
            } while ( Process32Next(hSnapshot,&pe32) );
        }
        CloseHandle( hSnapshot );
        printf( Msg[1] );
    }
    printf( "プロセス数:%d個\n", nCount );
    return 0;
}
  • ヘッダファイルとしてtlhelp32.hをインクルードして下さい。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« モジュール情報の一覧 | トップ | スレッド情報の一覧 »
最新の画像もっと見る

コメントを投稿

パフォーマンス関連」カテゴリの最新記事