Good times.

vb Code:
  1. Public Const PROCESS_QUERY_INFORMATION As Long = (&H400)
  2. Public Const PROCESS_VM_READ As Long = (&H10)
  3.  
  4. Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  5. Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  6. Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  7. Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef lpcbNeeded As Long) As Long
  8. Public Declare Function GetModuleFileNameEx Lib "psapi.dll" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long
  9.  
  10. Private Sub PrintProc(ProcessID As Long)
  11. Dim hProc As Long, hMod As Long, cbNeeded As Long
  12. Dim strBuff As String, lRet As Long
  13. strBuff = Space(260)
  14.  
  15. hProc = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
  16. If hProc <> 0 Then
  17.   If EnumProcessModules(hProc, hMod, 4&, cbNeeded) Then
  18.     lRet = GetModuleFileNameEx(hProc, hMod, strBuff, 260)
  19.     strBuff = Left$(strBuff, lRet)
  20.     Debug.Print ProcessID & " " & strBuff
  21.   End If
  22.   CloseHandle hProc
  23. End If
  24. End Sub
  25.  
  26. Public Function GetProcess()
  27. Dim aProcess(1023) As Long, cbNeeded As Long, cProcess As Long, I As Long
  28. EnumProcesses ByVal VarPtr(aProcess(0)), 1024 * 4, cbNeeded
  29. cProcess = cbNeeded / 4
  30. For I = 0 To cProcess
  31.   PrintProc aProcess(I)
  32. Next I
  33. End Function