Показать сообщение отдельно

  #635  
Старый 23.09.2007, 10:56
Xserg
Участник форума
Регистрация: 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.
 
Ответить с цитированием