What's the best way to enumerate the child processes of the currently running process under Win32? I can think of a couple of ways to do it, but they seem overly complicated and slow. Here's the requirements for the solution:
- Specifically I need to know if any there are any processes currentl开发者_如何学Goy running which were started by the current process.
- Will be running on WinXP and should not require distributing special DLL's.
- Should not require a lot of CPU overhead (it will be running periodically in the background).
- I'll eventually be writing this in Delphi, but I can convert from whatever language you have the code in. Mostly I'm looking for the most efficient set of Win32 API's to use.
Thanks!
You could use the toolhelp API
#include <tlhelp32.h>
Process32First()
And loop using
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;
精彩评论