下面是具体代码
总共分为两个过程
EnumProcTree 主要用来枚举句柄树
KillProc 关闭某个程序的进程
procedure EnumProcTree(const PID: DWORD;
out PID_Tree: TPIDTree);
procedure ListTree(RootPID: DWORD);
var
hP_Root: THandle;
Found: Boolean;
Pn: TProcesseNtry32;
hSnap: THandle;
begin
hP_Root := OpenProcess(PROCESS_ALL_ACCESS, False, RootPID);
if hP_Root <> 0 then
begin
CloseHandle(hP_Root);
SetLength(PID_Tree, Length(PID_Tree) + 1);
PID_Tree[Length(PID_Tree) - 1] := RootPID;
hSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Pn.dwSize := SizeOf(TProcesseNtry32);
Found := Process32First(hSnap, Pn);
while Found do
begin
if RootPID = Pn.th32ParentProcessID then
begin
ListTree(Pn.th32ProcessID);
end;
Found := Process32Next(hSnap, Pn);
end;
CloseHandle(hSnap);
end;
end;
begin
SetLength(PID_Tree, 0);
ListTree(PID);
end;
全部代码可以到
[url]http://www.xszlo.com/article/2012-12-24/7746.html[/url]
查看
总共分为两个过程
EnumProcTree 主要用来枚举句柄树
KillProc 关闭某个程序的进程
procedure EnumProcTree(const PID: DWORD;
out PID_Tree: TPIDTree);
procedure ListTree(RootPID: DWORD);
var
hP_Root: THandle;
Found: Boolean;
Pn: TProcesseNtry32;
hSnap: THandle;
begin
hP_Root := OpenProcess(PROCESS_ALL_ACCESS, False, RootPID);
if hP_Root <> 0 then
begin
CloseHandle(hP_Root);
SetLength(PID_Tree, Length(PID_Tree) + 1);
PID_Tree[Length(PID_Tree) - 1] := RootPID;
hSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Pn.dwSize := SizeOf(TProcesseNtry32);
Found := Process32First(hSnap, Pn);
while Found do
begin
if RootPID = Pn.th32ParentProcessID then
begin
ListTree(Pn.th32ProcessID);
end;
Found := Process32Next(hSnap, Pn);
end;
CloseHandle(hSnap);
end;
end;
begin
SetLength(PID_Tree, 0);
ListTree(PID);
end;
全部代码可以到
[url]http://www.xszlo.com/article/2012-12-24/7746.html[/url]
查看