Windows NT 4.0 以降でモジュールを列挙するにはEnumProcessModules()関数を使います。(戻る)
プロトタイプ宣言
BOOL EnumProcessModules( HANDLE hProcess, // プロセスのハンドル HMODULE *lphModule, // モジュールハンドルの配列 DWORD cb, // モジュールハンドルの配列サイズ LPDWORD lpcbNeeded // 返されたバイト数 ); DWORD GetModuleBaseName( HANDLE hProcess, // プロセスのハンドル HMODULE hModule, // モジュールのハンドル LPTSTR lpBaseName, // バッファ領域 DWORD nSize // バッファ領域のサイズ ); DWORD GetModuleFileName( HMODULE hModule, // モジュールのハンドル LPTSTR lpFilename, // バッファ領域 DWORD nSize // バッファ領域のサイズ );
サンプル
#include <stdio.h> #include <windows.h> #include <psapi.h> // Psapi.Lib // メイン関数 int main( void ) { TCHAR szFileName[ 1024 ]; TCHAR szBaseName[ 1024 ]; HMODULE ModuleBuff[ 1024 ]; HANDLE hProcess; DWORD dwSize; DWORD dwMax; DWORD dwNow; // プロセスのモジュールハンドルを取得 hProcess = GetCurrentProcess(); EnumProcessModules( hProcess, ModuleBuff, sizeof(ModuleBuff), &dwSize ); // 取得した数を求める dwMax = (dwSize / sizeof(HMODULE)); // プロセスのモジュールハンドルを表示 for ( dwNow = 0 ; dwNow < dwMax ; dwNow++ ){ GetModuleBaseName( hProcess, ModuleBuff[dwNow], szBaseName, sizeof(szBaseName) ); GetModuleFileName( ModuleBuff[dwNow], szFileName, sizeof(szFileName) ); printf( "%3d: %-30s %s\n", (dwNow + 1), szBaseName, szFileName ); } return 0; }
- ヘッダファイルとしてpsapi.hをインクルードして下さい。
- インポートライブラリとしてPsapi.Libをリンクして下さい。
※コメント投稿者のブログIDはブログ作成者のみに通知されます