2010-01-20 93 views
3

在Win32下枚舉當前正在運行的進程的子進程的最好方法是什麼?我可以想到一些方法來做到這一點,但他們似乎過於複雜和緩慢。以下是解決方案的要求:Win32:如何枚舉子進程?

  1. 具體而言,我需要知道是否有任何當前正在運行的進程正由當前進程啓動。
  2. 將在WinXP上運行,不應要求分發特殊的DLL。
  3. 不應該需要大量的CPU開銷(它將在後臺定期運行)。
  4. 我最終會在Delphi中寫這個,但是我可以從任何你有代碼的語言進行轉換。大多數情況下,我正在尋找最有效的一組Win32 API來使用。

謝謝!

回答

2

您可以使用TOOLHELP API

#include <tlhelp32.h> 

Process32First() 

而且循環使用

Process32Next() 

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

編輯德爾福

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

謝謝! Toolhelp32的東西確實比我想象的要容易得多。它比我所希望的要重,因爲我必須枚舉機器上的每個進程,而不是自動將其範圍限制在我的子進程中,但似乎並沒有太大的打擊。最重要的是它似乎工作並給出了正確的答案。 – 2010-01-20 18:49:01