Win32: как перечислить дочерние процессы? - PullRequest
4 голосов
/ 20 января 2010

Каков наилучший способ перечислить дочерние процессы текущего запущенного процесса под Win32? Я могу придумать пару способов сделать это, но они кажутся слишком сложными и медленными. Вот требования к решению:

  1. В частности, мне нужно знать, есть ли какие-либо процессы, запущенные в данный момент, которые были запущены текущим процессом.
  2. Будет работать на WinXP и не требует распространения специальных DLL.
  3. Не требует больших затрат ресурсов процессора (он будет периодически работать в фоновом режиме).
  4. В конце концов я напишу это в Delphi, но я могу конвертировать из любого языка, на котором у вас есть код. В основном я ищу наиболее эффективный набор Win32 API для использования.

Спасибо!

1 Ответ

4 голосов
/ 20 января 2010

Вы можете использовать API всплывающей подсказки

#include <tlhelp32.h>

Process32First() 

И цикл, используя

Process32Next()

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

РЕДАКТИРОВАТЬ 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...