モジュールの情報を表示(VB)

キーワード:

CreateToolhelp32Snapshot, Process32First, Module32First, Module32Next, CloseHandle, Process32Next

サンプルコード:

'主な宣言
Public Const SIZEOF_MODULEENTRY32 As Long = 548

Public Type MODULEENTRY32
	Size As Long
	ModuleID As Long
	ProcessID As Long
	GlobalRefCount As Long
	LocalRefCount As Long
	BaseAddress As Long
	ModuleSize As Long
	hModule As Long
	ModuleName As String * 256
	ModulePath As String * 260
End Type

' モジュールの情報をテキストボックスに表示
Private Sub DispModuleList()

	Dim hProcessSnap As Long
	Dim hModuleSnap As Long
	Dim pe As PROCESSENTRY32
	Dim me32 As MODULEENTRY32
	Dim bProcessResult As Long
	Dim bModuleResult As Long
	Dim Msg As String

	' プロセス一覧のスナップショットを作成
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

	' プロセスの最初の情報を取得
	pe.Size = SIZEOF_PROCESSENTRY32
	bProcessResult = Process32First(hProcessSnap, pe)

	Do While bProcessResult ' 全てのプロセスの情報を取得するループ

		' プロセスのモジュールリストのスナップショットを作成
		hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.ProcessID)

		'プロセスの最初のモジュールの情報を取得
		me32.Size = SIZEOF_MODULEENTRY32
		bModuleResult = Module32First(hModuleSnap, me32)

		Msg = Msg & "プロセスのファイル名: " & Left(pe.FileName, InStr(pe.FileName, vbNullChar) - 1) & vbCrLf

		Do While bModuleResult ' 全てのモジュールの情報を表示するループ

			' メッセージの作成
			Msg = Msg & "  モジュールID: " & Hex(me32.ModuleID) & vbCrLf
			Msg = Msg & "  プロセスID: " & Hex(me32.ProcessID) & vbCrLf
			Msg = Msg & "  グローバルでの参照カウント: " & me32.GlobalRefCount & vbCrLf
			Msg = Msg & "  このプロセスでの参照カウント: " & me32.LocalRefCount & vbCrLf
			Msg = Msg & "  ベースアドレス: " & Hex(me32.BaseAddress) & vbCrLf
			Msg = Msg & "  モジュールのサイズ: " & me32.ModuleSize & vbCrLf
			Msg = Msg & "  モジュールハンドル: " & Hex(me32.hModule) & vbCrLf
			Msg = Msg & "  モジュール名: " & Left(me32.ModuleName, InStr(me32.ModuleName, vbNullChar) - 1) & vbCrLf
			Msg = Msg & "  モジュールのパス: " & Left(me32.ModulePath, InStr(me32.ModulePath, vbNullChar) - 1) & vbCrLf

			Msg = Msg & vbCrLf

			'次のモジュールの情報を取得
			bModuleResult = Module32Next(hModuleSnap, me32)
		Loop

		Msg = Msg & vbCrLf

		'ヒープリストのスナップショットの破棄
		CloseHandle hModuleSnap

		' 次のプロセスの情報を取得
		bProcessResult = Process32Next(hProcessSnap, pe)
	Loop

	'メッセージの表示
	txtMsg.Text = Msg & vbCrLf

	' プロセスのスナップショットの破棄
	CloseHandle hProcessSnap

End Sub

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。