2010-01-20 5 views
3

Quelle est la meilleure façon d'énumérer les processus enfants du processus en cours sous Win32? Je peux penser à quelques façons de le faire, mais ils semblent trop compliqués et lents. Voici les exigences pour la solution:Win32: Comment énumérer les processus enfants?

  1. Plus précisément, j'ai besoin de savoir s'il y a des processus en cours qui ont été lancés par le processus en cours.
  2. Sera exécuté sur WinXP et ne devrait pas nécessiter la distribution de DLL spéciales.
  3. Ne nécessite pas beaucoup de temps processeur (il sera exécuté périodiquement en arrière-plan).
  4. Je finirai par écrire cela en Delphi, mais je peux convertir à partir de n'importe quelle langue dans laquelle vous avez le code. La plupart du temps, je cherche l'ensemble le plus efficace d'API Win32 à utiliser.

Merci!

Répondre

2

Vous pouvez utiliser l'API TOOLHELP

#include <tlhelp32.h> 

Process32First() 

Et boucle en utilisant

Process32Next() 

http://www.codeproject.com/KB/threads/processes.aspx

EDIT delphi

uses tlhelp32; 

procedure FillAppList(Applist: Tstrings); 
var Snap:THandle; 
     ProcessE:TProcessEntry32; 
begin 
    Applist.Clear; 
    Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    ProcessE.dwSize:=SizeOf(ProcessE); 
    if Process32First(Snap,ProcessE) then 
    begin 
      Applist.Add(string(ProcessE.szExeFile)); 
      while Process32Next(Snap,ProcessE) do 
       .. compare parent id 
     end 
     CloseHandle(Snap); 
end; 
+0

Merci! Le truc Toolhelp32 est en effet plus facile que ce que j'avais pensé à utiliser. C'est plus lourd que ce que j'espérais depuis que je dois énumérer tous les processus sur la machine plutôt que d'avoir automatiquement la portée de mes processus enfants, mais cela ne semble pas être un gros problème. La chose la plus importante est que cela semble fonctionner et donne les bonnes réponses. –

Questions connexes