Yo pensando más en Delphi, se me ocurren vía WMI 2 formas de hacerlo.
1)
Realizando pooling sobre la clase
Win32_Process. Con ella puedes obtener la lista de ficheros ejecutánose. Hemos hablado otrs vaces aquí de WMI (busca ayuda sobre esta clase). También puedes revisar la aplicación
VProcess que puedes encontrar en mi web y que utiliza esta técnica. Puedes revisar el código fuente y la librería
GlibWMI que posee un componente para acceder a esta clase de forma visual.
2) La otra opción también usando WMI es
utilizar los eventos. Y para ello lo más sencillo es revisar
esta entrada del blog de Rodrigo. Ahí se explica la utilización de eventos y en este caso, cómo recibir un evento cada vez que se inicia una instancia de una aplicación.
Un saludo.