実行中のプロセスの情報を一覧で取得する。
WMI(Windows Management Instrumentation)を利用して実行中のプロセスの情報を取得します。
VBAでWMIから情報を取得するにはSWbemLocatorオブジェクトのConnectServerメソッドを利用してコンピューター上の WMIへ接続することで取得できます。
実行中のプロセスの情報は接続したWMIの Win32_Processクラス から取得します。
サンプルコードでは新しいシートを作成し、そのシートにプロセスの情報一覧を出力しています。
'*****************************************************************
' 実行中プロセスの情報取得
'*****************************************************************
Sub getProcessInfo()
'出力用シートの追加
Dim sShtNm As String: sShtNm = "ProcessList"
Call addSheet(sShtNm)
'SWbemLocatorオブジェクトを作成してWMIに接続
Dim oWMI As Object
Set oWMI = CreateObject("WbemScripting.SWbemLocator").ConnectServer
'オブジェクト取得のクエリを実行
Dim oQrySet As Object
Set oQrySet = oWMI.ExecQuery("SELECT * FROM Win32_Process")
'プロセスの一覧を作成
With Sheets(sShtNm)
.Cells(1, 1) = "プロセス名"
.Cells(1, 2) = "プロセスID"
.Cells(1, 3) = "Handle"
.Cells(1, 4) = "HandleCount"
.Cells(1, 5) = "実行可能ファイルへのパス"
.Cells(1, 6) = "コマンドライン"
.Cells(1, 7) = "実行日"
Dim oPrc As Object
Dim i As Long
i = 2
For Each oPrc In oQrySet
.Cells(i, 1) = oPrc.Name
.Cells(i, 2) = oPrc.ProcessId
.Cells(i, 3) = oPrc.Handle
.Cells(i, 4) = oPrc.HandleCount
.Cells(i, 5) = oPrc.ExecutablePath
.Cells(i, 6) = oPrc.CommandLine
.Cells(i, 7) = oPrc.CreationDate
i = i + 1
Next
End With
Set oQrySet = Nothing
End Sub
'******************************************************************
' シートの追加
'------------------------------------------------------------------
' 第1引数:設定したいシート名
'******************************************************************
Sub addSheet(getShtNm As String)
'右端にシートを追加する
Worksheets.Add After:=Sheets(Sheets.Count)
'シートの名前を設定
On Error Resume Next
Do While True
ActiveSheet.Name = getShtNm
If Err.Number = 0 Then
Exit Do
Else
'シート名が重複する場合は末尾に日時を付けて対応
getShtNm = getShtNm & "_" & Format(Now(), "yyyymmddhhmmss")
Err.Clear
End If
Loop
On Error GoTo 0
End Sub
■実行結果