HANDLE Toolhelp32Snapshot(DWORD Flags, DWORD ProcessID)
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が返される。
'主な宣言 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