【问题标题】:Win32: How to enumerate child processes?Win32:如何枚举子进程?
【发布时间】:2011-01-07 04:14:49
【问题描述】:

在Win32下枚举当前运行进程的子进程最好的方法是什么?我可以想到几种方法来做到这一点,但它们似乎过于复杂和缓慢。以下是解决方案的要求:

  1. 具体来说,我需要知道是否有任何当前正在运行的进程由当前进程启动。
  2. 将在 WinXP 上运行,并且不需要分发特殊的 DLL。
  3. 不应需要大量 CPU 开销(它将在后台定期运行)。
  4. 我最终将使用 Delphi 编写此代码,但我可以从您拥有代码的任何语言转换。主要是我正在寻找最有效的 Win32 API 集来使用。

谢谢!

【问题讨论】:

    标签: windows winapi process


    【解决方案1】:

    您可以使用 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;
    

    【讨论】:

    • 谢谢! Toolhelp32 的东西确实比我想用的更容易。它比我希望的要重,因为我必须枚举机器上的每个进程,而不是将其自动限定为我的子进程,但它似乎并没有太大的影响。最重要的是它似乎确实有效并且给出了正确的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2017-08-07
    • 2012-11-17
    • 1970-01-01
    • 2011-10-22
    • 2014-02-13
    相关资源
    最近更新 更多