How to get program names and task IDs of running processes. shell()
returns task ID of initiated process. Similar, I would like to get the task ID and name of processes which are already running and is not created by macro. I've found code which returns programs names but its output lacks task IDs information :
http://www.vbaexpress.com/forum/archive/index.php/t-36677.html
Sub Test_AllRunningApps()
Dim apps() As Variant
apps() = AllRunningApps
Range("A1").Resize(UBound(apps), 1).Value2 = WorksheetFunction.Transpose(apps)
Range("A:A").Columns.AutoFit
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
Next
a() = oDic.keys
Set objProcessSet = Nothing
Set oDic = Nothing
AllRunningApps = a()
End Function
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With