TCreateToolhelp32Snapshot=function(dwFlags,th32ProcessID:DWORD):THandlestdcall;(具体参数说明请参看帮助)TProcessEntry32结构包含进程的一些信息,定义如下
07TProcessEntry32=tagPROCESSENTRY32W;
08
09tagPROCESSENTRY32W=record
10
11dwSize:DWORD; //该记录型的大小,在使用之前必须对它进行初始化
12
13cntUsage:DWORD; //这个成员一般设置为0
14
15th32ProcessID:DWORD; // this processPID
16
17th32DefaultHeapID:DWORD;
18
19th32ModuleID:DWORD; // associatedexe
20
21cntThreads:DWORD; //该进程开启的线程数
22
23th32ParentProcessID:DWORD;//this process's parent process创建该进程的进程的PID
24
25pcPriClassBase:Longint; // Base priority ofprocess's threads线程优先权
26
27dwFlags:DWORD;
28
29szExeFile:array[0..MAX_PATH-1]ofWChar;//Path 该进程可执行文件的名字
30
31end;
32
Process32First函数获取系统快照里第一个进程的信息,声明如下:
TProcess32FirstW=function(hSnapshot:THandle;varlppe:TProcessEntry32W):BOOLstdcall;
hSnapshot为通过CreateToolhelp32Snapshot获取的快照的句柄,lppe是指向TProcessEntry32的一个指针,调用该函数得到的进程信息就存放在lppe指向的记录里Process32Next函数获取系统快照里下一个进程的信息,声明同上,一般和上一个函数一起使用。
完整代码如下:
43procedureGetSysPro;
44var
45h:thandle;
46f:boolean;
47lppe:tprocessentry32;
48begin
49h:=CreateToolhelp32Snapshot(TH32cs_SnapProcess,0);
50lppe.dwSize:=sizeof(lppe);
51f:=Process32First(h,lppe);
52whileinteger(f)<>0do

53begin
54Memo1.Lines.Add(lppe.szExeFile+'----'+IntToStr(lppe.th32ProcessID));
55f:=Process32Next(h,lppe);
56end;
57end;