プロセス情報を取得するにはProcess32First()、Process32Next()関数を使います。
手順は次のようになります。(戻る)
- プロセス情報を含むスナップショットを作成(CreateToolhelp32Snapshot)
- 最初のモジュール情報を取得(Process32First)
- 続きのモジュール情報を取得(Process32Next)
- スナップショットを破棄(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をインクルードして下さい。
関連記事
- プロセス情報の一覧
- スレッド情報の一覧
- モジュール情報の一覧
※コメント投稿者のブログIDはブログ作成者のみに通知されます