実行中のプロセスの情報を一覧で取得

実行中のプロセスの情報を一覧で取得する。

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

 ■実行結果