VBA Get program names and task IDs of running processes

How to get program names and task IDs of running processes. shell()

returns the task id of the initiated process. Likewise, I would like to get the task id and name of the processes that are already running and not created by the macro. I found some code that returns program names, but the output is missing information about task IDs:


Sub Test_AllRunningApps()
    Dim apps() As Variant
    apps() = AllRunningApps

    Range("A1").Resize(UBound(apps), 1).Value2 = WorksheetFunction.Transpose(apps)
End Sub

'Similar to: http://msdn.microsoft.com/en-us/library/aa393618%28VS.85%29.aspx
Public Function AllRunningApps() As Variant
    Dim strComputer As String
    Dim objServices As Object, objProcessSet As Object, Process As Object
    Dim oDic As Object, a() As Variant

    Set oDic = CreateObject("Scripting.Dictionary")

    strComputer = "."

    Set objServices = GetObject("winmgmts:\\" _
        & strComputer & "\root\CIMV2")
    Set objProcessSet = objServices.ExecQuery _
        ("SELECT Name FROM Win32_Process", , 48)

    For Each Process In objProcessSet
       If Not oDic.exists(Process.Name) Then oDic.Add Process.Name, Process.Name

    a() = oDic.keys

    Set objProcessSet = Nothing
    Set oDic = Nothing

    AllRunningApps = a()
End Function



source to share

1 answer

You can change the SQL to read Select Name, ProcessID FROM Win32_Process

Then in your For Loop to get the name, use Process.Properties_("Name").value

and Process.Properties_("ProcessID").value

where needed.



All Articles