プロセス数、スレッド数、モジュール数を取得するにはCreateToolhelp32Snapshot()関数を使います。
この関数でプロセス、スレッド、モジュールの情報をスナップショットとして収集(作成)します。
その後に次の関数で詳細な情報を取り出します。(戻る)
- プロセス情報の取得(Process32First,Process32Next)
- スレッド情報の取得(Thread32First,Thread32Next)
- モジュール情報の取得(Module32First,Module32Next)
プロトタイプ宣言
HANDLE CreateToolhelp32Snapshot( DWORD dwFlags, // スナップショットに含めるフラグ DWORD th32ProcessID // プロセスID(ヒープ情報、モジュール情報のとき指定) ); BOOL CloseHandle( HANDLE hObject // オブジェクトのハンドル );
サンプル
#include <stdio.h> #include <windows.h> #include <tlhelp32.h> // メイン関数 int main( void ) { DWORD dwPID = GetCurrentProcessId(); HANDLE hSnapshot; INT nModule = 0; INT nThread = 0; INT nProccess = 0; if ( (hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,dwPID)) != INVALID_HANDLE_VALUE ){ MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) }; THREADENTRY32 te32 = { sizeof(THREADENTRY32) }; PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; // モジュール数 if ( Module32First(hSnapshot,&me32) ){ do { nModule++; } while ( Module32Next(hSnapshot,&me32) ); } // スレッド数 if ( Thread32First(hSnapshot,&te32) ){ do { nThread++; } while ( Thread32Next(hSnapshot,&te32) ); } // プロセス数 if ( Process32First(hSnapshot,&pe32) ){ do { nProccess++; } while ( Process32Next(hSnapshot,&pe32) ); } CloseHandle( hSnapshot ); } printf( "モジュール数:%d個\n", nModule ); printf( "スレッド数:%d個\n", nThread ); printf( "プロセス数:%d個\n", nProccess ); return 0; }
- 必ず各構造体のdwSizeメンバに構造体のサイズをセットしてから使って下さい。
- me32.dwSize = sizeof( MODULEENTRY32 );
- te32.dwSize = sizeof( THREADENTRY32 );
- pe32.dwSize = sizeof( PROCESSENTRY32 );
- ヘッダファイルとしてtlhelp32.hをインクルードして下さい。
関連記事
- プロセス/スレッド数の取得
- ハンドル/スレッド総数の取得
※コメント投稿者のブログIDはブログ作成者のみに通知されます