
23.09.2007, 10:56
|
|
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
С нами:
10222145
Репутация:
726
|
|
Сообщение от Mkey
как получить список дочерних процессов чужого приложения?
для win2000-XP
желательно с примером кода....
Код:
program kill;
uses windows,classes,SysUtils;
const TH32CS_SNAPPROCESS =$02;
function CreateToolhelp32Snapshot(dwFlags:DWORD;th32ProcessID:DWORD):dword;stdcall
external 'Kernel32.dll' name 'CreateToolhelp32Snapshot';
type PROCESSENTRY32=record
dwSize: dword;
cntUsage :DWORD;
th32ProcessID :DWORD;
th32DefaultHeapID :pointer;
th32ModuleID :DWORD;
cntThreads: DWORD;
th32ParentProcessID:DWORD;
pcPriClassBase :longint;
dwFlags :DWORD;
szExeFile:array[0..MAX_PATH] of CHAR;
end;
function Process32First(hSnapshot:DWORD;ENTRY32:pointer):boolean;stdcall
external 'Kernel32.dll' name 'Process32First';
function Process32Next(hSnapshot:DWORD;ENTRY32:pointer):boolean;stdcall
external 'Kernel32.dll' name 'Process32Next';
var
st:STARTUPINFO;
pi:PROCESS_INFORMATION;
zp:cardinal;
nproc:cardinal;
pn:PROCESSENTRY32;
begin
// находим ID EXPLORER
zp:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pn.dwSize:=sizeof(pn);
Process32First(Zp,@pn);
while Process32Next(Zp,@pn) do
if lstrcmpiA(pn.szExeFile,'EXPLORER.EXE') = 0 then begin
nproc:=pn.th32ProcessID;break;
end;
closehandle(zp);
// кто его дети ? (EXPLORER.EXE)
zp:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pn.dwSize:=sizeof(pn);
Process32First(Zp,@pn);
while Process32Next(Zp,@pn) do
if pn.th32ParentProcessID=nproc then
messagebox(0,pn.szExeFile,Pansichar('Pid='+inttohex(pn.th32ProcessID,4)),0);
closehandle(zp);
// чей мы ребенок ?
zp:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pn.dwSize:=sizeof(pn);
Process32First(Zp,@pn);
while Process32Next(Zp,@pn) do
if pn.th32ProcessID=GetCurrentProcessId then begin
messagebox(0,pn.szExeFile,Pansichar('Pid='+inttohex(pn.th32ParentProcessID,4)),0);
//убиваем нашего родителя
zeromemory(@st,sizeof(st));
st.cb:=sizeof(st);
CreateProcess(nil,Pansichar('taskkill.exe /PID '+inttostr(pn.th32ParentProcessID)),nil,nil,true,0,nil,nil,st,pi);
end;
closehandle(zp);
end.
|
|
|