📄 新建 文本文档.txt
字号:
要实现获得系统的所有运行进程和每个运行进程所调用模块的信息,实际上只要使用两重循环,外循环获取系统的所有进程列表,内循环获取每个进程所调用模块列表。用以下四组API调用实现:
1、创建系统的所有进程列表
ProcessList:= CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS,0);
2、提取进程列表项信息存储在TPROCESSENTRY32 pe中
Process32First(ProcessList,pe)
Process32Next(ProcessList,pe)
3、创建指定进程所有调用模块列表
ModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
pe.processID);
4、提取调用模块列表项信息存储在TMODULEENTRY32 pm中
Module32First(ModuleList,pm);
Module32Next(ModuleList,pm);
三、核心源码
有了以上知识以后,我们就可以很容易地实现获取系统的所有进程以及各进程运行过程所调用的模块文件了。具体步骤如下:
1、运行Delphi,进入Delphi的IDE开发环境;
2、新建Application;
3、在默认的Form1中添加Treeview和Button控件;
4、设置Button的OnClick属性为ProcessEnum;
5、把以下代码输入ProcessEnum过程中;
6、编译运行;
核心代码如下所示:
uses Tlhelp32;
procedure TForm1.ProcessEnum(Sender: TObject);
var
ProcessList :Thandle;
pe :TPROCESSENTRY32;
node :TTreenode;
processnumber :integer;
procedure ModuleEnum(processid:Dword);
var
ModuleList :Thandle;
pm :TMODULEENTRY32;
begin
ModuleList:=CreateToolhelp32Snapshot
(TH32CS_SNAPMODULE,processID);
pm.dwSize:=sizeof(TMODULEENTRY32);
if module32first(ModuleList,pm)
then begin
treeview1.Items.addchild(node,pm.szexepath);
while module32next(ModuleList,pm) do
treeview1.items.addchild(node,pm.szexepath);
end;
closehandle(ModuleList);
end; // ModuleEnum
begin // ProcessEnum
processnumber:=0;
treeview1.Items.Clear;
ProcessList:=CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS,0);
pe.dwSize:=sizeof(TPROCESSENTRY32);
if process32first(ProcessList,pe) then
begin
node:=treeview1.Items.Add(nil,pe.szexefile);
ModuleEnum(pe.th32ProcessID);
inc(processnumber);
while process32next(ProcessList,pe) do
begin
node:=treeview1.Items.Add(nil,pe.szexefile);
ModuleEnum(pe.th32ProcessID);
inc(processnumber);
end;
end;
edit1.text:=’系统进程:’+inttostr(processnumber);
closehandle(ProcessList);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -