W
wp231957
Unregistered / Unconfirmed
GUEST, unregistred user!
//扫描顶层窗口===有标题栏
//这是一个回调函数,问题见下面
function enumchildproc4(h:hwnd;l:lparam):dword;stdcall;
var
s,t:array[0..30] of char;
hprocess,processid:dword;
ListItem: TListItem;
lpm:array[0..255] of dword;
mbneed:dword;
lpfilename:string;
begin
getwindowtext(h,@t,30);
getclassname(h,@s,30);
setlength(lpfilename,512);
if t<>'' then begin
getwindowthreadprocessid(h,processid);
// ¸ù¾Ý½ø³ÌID»ñÈ¡¾ä±ú
hprocess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,FALSE,processid);
//ö¾ÙÄ£¿é
enumprocessmodules(hprocess,@lpm,sizeof(lpm),mbneed);
//»ñÈ¡Ê×Ä£¿éµÄÃû×Ö----¸Ã½ø³ÌµÄȫ·¾¶Ãû³Æ
getmodulebasename(hprocess,lpm[0],pchar(lpfilename),512);
listitem:=form1.ListView1.items.Add ;
listitem.Caption :=inttostr(i);
listitem.SubItems.add(s);
listitem.SubItems.add(t);
listitem.SubItems.add(lpfilename);
listitem.SubItems.add(inttostr(processid));//当进程相同时,进程ID也相同
//理论上句柄也应该相同,可是就是不同,不知道为什么
listitem.SubItems.add(inttostr(hprocess));
listitem.SubItems.add(inttostr(h));
inc(i);
closehandle(hprocess); //如果不加这个语句,那么所获取的进程句柄都不相同
//如果加这个语句,那么所得到的句柄始终都是一个数值
end;
end;
//这是一个回调函数,问题见下面
function enumchildproc4(h:hwnd;l:lparam):dword;stdcall;
var
s,t:array[0..30] of char;
hprocess,processid:dword;
ListItem: TListItem;
lpm:array[0..255] of dword;
mbneed:dword;
lpfilename:string;
begin
getwindowtext(h,@t,30);
getclassname(h,@s,30);
setlength(lpfilename,512);
if t<>'' then begin
getwindowthreadprocessid(h,processid);
// ¸ù¾Ý½ø³ÌID»ñÈ¡¾ä±ú
hprocess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,FALSE,processid);
//ö¾ÙÄ£¿é
enumprocessmodules(hprocess,@lpm,sizeof(lpm),mbneed);
//»ñÈ¡Ê×Ä£¿éµÄÃû×Ö----¸Ã½ø³ÌµÄȫ·¾¶Ãû³Æ
getmodulebasename(hprocess,lpm[0],pchar(lpfilename),512);
listitem:=form1.ListView1.items.Add ;
listitem.Caption :=inttostr(i);
listitem.SubItems.add(s);
listitem.SubItems.add(t);
listitem.SubItems.add(lpfilename);
listitem.SubItems.add(inttostr(processid));//当进程相同时,进程ID也相同
//理论上句柄也应该相同,可是就是不同,不知道为什么
listitem.SubItems.add(inttostr(hprocess));
listitem.SubItems.add(inttostr(h));
inc(i);
closehandle(hprocess); //如果不加这个语句,那么所获取的进程句柄都不相同
//如果加这个语句,那么所得到的句柄始终都是一个数值
end;
end;