In questo articolo è riportato un metodo per ottenere la lista dei processi/programmi in esecuzione su una macchina.
Si utilizza, a questo fine, lo spazio dei nomi System.Management, sfruttando la possibilità di interrogare il sistema a mezzo di query SQL-like.

Nell'esempio che segue, si suppone di voler estrarre tutte le linee di comando dei programmi (estensione EXE) in esecuzione, popolando una lista di stringhe e - infine - utilizzando quest'ultima come fonte dati di una ListBox, ovvero facendo in modo che tale controllo esponga, riga per riga, i risultati dell'interrogazione.

Dim processi As New List(Of String)
 
' Seleziona il campo "CommandLine" dalla classe Win32_Process, estraendo i record il cui campo name termina con .EXE
  Dim query As New ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE Name like '%.EXE'")
 
Dim listaProc As ManagementObjectCollection = query.Get
 
For Each p As ManagementBaseObject In listaProc
 
   processi.Add(p("CommandLine").ToString())
 
Next
ListBox1.DataSource = processi

Naturalmente, l'utente potrebbe voler personalizzare la query nei modi più disparati, verificando non soltanto il nome, ma anche altri parametri propri di un processo. Per una lista completa dei nomi di campo della classe Win32_Process, visitare questo link: Win32_Process Class