プロセス情報などのスナップショットの作成

Cの宣言:

HANDLE Toolhelp32Snapshot(DWORD Flags, DWORD ProcessID)

VBの宣言:

Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal Flags As Long, ByVal ProcessID As Long) As Long

説明:

プロセスなどの情報のスナップショットを作成する。

この関数は95またはNT5.0以降で使用可能である。

本関数を実行すると、Flagsで指定した種類の情報が作成され、そのハンドルが返される。これをスナップショットと呼ぶ。スナップショットを破棄したい場合、CloseHandleを実行する。

引数の意味は、以下の通り。
Flags (IN) 作成するスナップショットの種類を指定するフラグ。設定可能な値は後述の表を参照。
ProcessID (IN) FlagsにTH32CS_SNAPHEAPLISTかまたはTH32_CS_SNAPMODULEを指定した場合、どのプロセスに関するスナップショットを作成するかを指定するプロセスのID。それ以外のフラグを指定した場合は、この引数は無視される。

作成するスナップショットの種類を表すFlagsには、以下の値の論理和を指定する。
TH32CS_SNAPHEAPLIST ProcessIDで指定したプロセスのヒープリスト。
TH32CS_SNAPPROCESS プロセス一覧のスナップショット。
TH32CS_SNAPTHREAD スレッド一覧のスナップショット。
TH32CS_SNAPMODULE ProcessIDで指定したプロセスのモジュール一覧のスナップショット。
TH32CS_SNAPALL TH32CS_SNAPHEAPLIST、TH32CS_SNAPPROCESS。TH32CS_SNAPTHREAD、TH32CS_SNAPMODULEの組み合わせ。
TH32CS_INHERIT 返されるハンドルを継承可能とする。

関数の実行に成功した場合、スナップショットのハンドルが返される。関数の実行に失敗した場合、-1が返される。

サンプルコード(VB):

'主な宣言
Public Const SIZEOF_PROCESSENTRY32 As Long = 296

Public Type PROCESSENTRY32
	Size As Long
	RefCount As Long
	ProcessID As Long
	HeapID As Long
	ModuleID As Long
	ThreadCount As Long
	ParentProcessID As Long
	BasePriority As Long
	Flags As Long
	FileName As String * 260
End Type

' プロセスの一覧をテキストボックスに表示
Private Sub DispProcessList()

	Dim hSnap As Long
	Dim pe As PROCESSENTRY32
	Dim bResult As Long
	Dim Msg As String

	'テキストボックスをクリア
	txtMsg.Text = ""

	' スナップショットを作成
	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

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

	Do While bResult ' 全てのプロセスの情報を表示するループ

		'メッセージの作成
		Msg = ""
		Msg = Msg & "ファイル名: " & Left(pe.FileName, InStr(pe.FileName, vbNullChar) - 1) & vbCrLf
		Msg = Msg & "参照カウント: " & pe.RefCount & vbCrLf
		Msg = Msg & "プロセスID: " & Hex(pe.ProcessID) & vbCrLf
		Msg = Msg & "デフォルトのヒープID: " & Hex(pe.HeapID) & vbCrLf
		Msg = Msg & "モジュールID: " & Hex(pe.ModuleID) & vbCrLf
		Msg = Msg & "スレッド数: " & pe.ThreadCount & vbCrLf
		Msg = Msg & "親プロセスのID: " & Hex(pe.ParentProcessID) & vbCrLf
		Msg = Msg & "基本優先順位レベル: " & pe.BasePriority & vbCrLf

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

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

	' スナップショットの破棄
	CloseHandle hSnap

End Sub

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

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