タイトル | 現在起動しているプロセス情報を列挙する |
対象言語 | VB4.0, Access95以降 |
動作確認OS | Windows95,98 |
使用関数 | CreateToolhelp32Snapshot Process32First Process32Next |
改築日 | 1999/09/04 |
Source Download |
全プロセスを列挙し、プロセス情報を表示します。 プロセスは刻一刻と変化するので、CreateToolhelp32Snapshot API関数 で、一旦その時点での全プロセス情報のスナップを撮ります。 そのスナップに対して、Process32First,Process32Next API関数 を使ってプロセス情報を取得していきます。 ですので、これらの関数でプロセス情報を取得しても、 その時点でプロセスが必ず存在するとは限らないので、注意して下さい。 この関数は現在、NTには対応していません。 |
![]() |
1. フォームを作成しコマンドボタン(Command1)、リストボックス(List1)
を貼り付けてください。 Option Explicit Private Sub Command1_Click() Dim cnt As Integer Dim i As Integer cnt = Y_EnumProcessFromSnapshot() List1.Clear For i = 0 To cnt - 1 With ProcessEntries(i) List1.AddItem "------- " & i + 1 & " -------" List1.AddItem "実行ファイル = " & EditBuf(.szExeFile) List1.AddItem "自プロセスID = " & Hex$(.th32ProcessID) List1.AddItem "親プロセスID = " & Hex$(.th32ParentProcessID) List1.AddItem "スレッド数 = " & .cntThreads List1.AddItem "優先度 = " & .pcPriClassBase List1.AddItem "参照回数 = " & .cntUsage End With Next End Sub Private Sub Form_Load() Call Command1_Click End Sub |
2.モジュールウインドウを作成し、下のソースを入力してください。 Option Explicit '現在のプロセス情報のスナップショットを撮る Declare Function CreateToolhelp32Snapshot Lib "kernel32" _ (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long 'スナップショットから最初のプロセス情報を取得する Declare Function Process32First Lib "Kernel32.dll" _ (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long 'スナップショットから次のプロセス情報を取得する Declare Function Process32Next Lib "kernel32" _ (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long Public Const MAX_PATH = 260 Type PROCESSENTRY32 dwSize As Long 'この構造体のサイズ cntUsage As Long 'このプロセスが参照された回数 th32ProcessID As Long 'プロセスID th32DefaultHeapID As Long 'デフォルトヒープID th32ModuleID As Long 'モジュールID cntThreads As Long 'スレッド数 th32ParentProcessID As Long '親プロセスID pcPriClassBase As Long 'このプロセスのプライオリティ dwFlags As Long '未使用 szExeFile As String * MAX_PATH 'プロセスのファイル名 End Type Public Const TH32CS_SNAPPROCESS = &H2& 'プロセスのスナップを撮る Public ProcessEntries() As PROCESSENTRY32 'この配列にプロセス情報がセットされる Public Function Y_EnumProcessFromSnapshot() As Integer '*************************************************************** '機能 : 起動しているプロセス情報を列挙する '戻り値: プロセス数 '備考 : NTには対応していません。 ' プロセスは刻一刻と変化します。 ' ここで取得したプロセス情報は必ずしも存在するとは限りません。 '*************************************************************** Dim longret As Long Dim hSnapShot As Long Dim Pentry As PROCESSENTRY32 Dim ExePath As String Dim cnt As Integer ReDim ProcessEntries(0) '現在のプロセス情報のスナップを撮る hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) If hSnapShot <> -1 Then 'スナップからプロセス情報を列挙し ProcessEntries配列にセット Pentry.dwSize = LenB(Pentry) longret = Process32First(hSnapShot, Pentry) cnt = 0 Do While longret <> 0 ReDim Preserve ProcessEntries(cnt) ProcessEntries(cnt) = Pentry cnt = cnt + 1 longret = Process32Next(hSnapShot, Pentry) Loop End If Y_EnumProcessFromSnapshot = cnt End Function Public Function EditBuf(Buf As String) As String '*********************************************************** '機能 : 引数 Bufの文字列中の Nullコードを検索し、Nullコードを ' 除いた文字列を返す '引数 : Buf = Nullコードを含む文字列 '戻り値: Nullコードを除いた文字列 '*********************************************************** Dim i As Long i = InStr(Buf, vbNullChar) If i <> 0 Then EditBuf = Left$(Buf, i - 1) Else EditBuf = Buf End If End Function |
Copyright (C)1997-2001 空耳工房 MY2Project All rights reserved. |