No, purtroppo no. Ma se non noti rallentamenti, beh, allora è tutto ok.
Provo a darti un'idea di come funziona il process logger che ho in testa, scusami se sono troppo tecnico, dimmi quando la cosa diventa oscura
1) in windows esistono gli hooks: non sono altro che funzioni che l'utente può installare, e che vengono notificate quando succedono determinate cose (praticamente: tu dici a windows "ehi, quando crei una finestra, mandami un messaggio a questa funzione)
2) gli hooks possono essere locali ad un thread (ricevono i messaggi di notifica solo relativi a quel thread), oppure possono essere globali al sistema.
3) ogni processo, sotto windows, non condivide memoria con gli altri processi (sto semplificando, non correggetemi). Quindi windows non potrebbe notificare alcunché alla tua funzione, se questa non viene caricata nello spazio di memoria di tutti i processi, perché semplicemente "non la vedrebbe" all'interno del processo (parlo degli hook globali)
4) gli eseguibili non possono essere caricati nello spazio di memoria di altri eseguibili; l'unica cosa che può essere "mappata" (si dice così) è una dll. Morale: la tua funzione deve essere in una dll.
5) quindi, per ogni processo, windows carica l'eseguibile, le sue dll, e in più la dll in cui hai messo la funzione di notifica (hook)
6) la funzione di notifica riceve notifiche a seconda del tipo di hook che hai installato, nel caso di un hook CBT (che in questo caso è quello più usato) la tua funzione viene chiamata sostanzialmente quando crei o distruggi una finestra, quando l'attivi e quando la ridimensioni (per i curiosi
qui ci sono i dettagli di msdn)
7) ora, la tua dll dovrà avvertire l'eseguibile che ti fa vedere i processi in esecuzione, ma questo è in un altro spazio di memoria, non può semplicemente chiamarne una funzione. Deve ricorrere a uno dei metodi in cui su windows due processi possono scambiarsi messaggi (sono parecchi: pipes, mailslots, memory mapped files, sockets sono i principali, ma ce n'è molti altri). Nel mio esempio di prima questo non avveniva perché mi limitavo a scrivere il nome del nuovo processo su un file, ma - se noti - per evitare che più dll si mettessero a scrivere contemporaneamente, creavo un Mutex (Mutually Exclusive) che permetteva la scrittura ad una dll alla volta. I mutex sono kernel objects (così come tutti i meccanismi che ho citato sopra, salvo i sockets), e i kernel objects sono risorse relativamente limitate nel sistema.
Questo è come lo farei io, non è detto che chi ha fatto il programma da te citato non abbia seguito una tecnica totalmente diversa.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...