unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TLHelp32, ComCtrls; type TForm1 = class(TForm) Button1: TButton; ListView1: TListView; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var hSnapshot:THandle; pe32:TProcessEntry32; item:TListItem; begin {function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle;} {CreateToolhelp32Snapshot函数功能:函数为指定的进程、进程使用的堆[HEAP]、} {模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。 } {参数1说明:dwFlags} {TH32CS_INHERIT 声明快照句柄是可继承的。} {TH32CS_SNAPALL 在快照中包含系统中所有的进程和线程。} {TH32CS_SNAPHEAPLIST 在快照中包含在th32ProcessID中指定的进程的所有的堆。} {TH32CS_SNAPMODULE 在快照中包含在th32ProcessID中指定的进程的所有的模块。} {TH32CS_SNAPPROCESS 在快照中包含系统中所有的进程。} {TH32CS_SNAPTHREAD 在快照中包含系统中所有的线程。} {参数2说明:th32ProcessID} {指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了} {TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,} {所有的进程都会被快照。} {返回值:} {调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。 } hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if hSnapshot=0 then begin ShowMessage('创建进程快照失败!'); Abort(); end; {PROCESSENTRY32结构} {tagPROCESSENTRY32 = packed record dwSize: DWORD; 结构的大小 cntUsage: DWORD; 此进程的引用计数 th32ProcessID: DWORD; 进程ID th32DefaultHeapID: DWORD; 进程默认堆 th32ModuleID: DWORD; 进程模块IDThis cntThreads: DWORD; 此进程开启的线程计数 th32ParentProcessID: DWORD; 父进程的ID pcPriClassBase: Longint; 线程优先权 dwFlags: DWORD; szExeFile: array[0..MAX_PATH - 1] of Char; 进程全名 end;} pe32.dwSize:=SizeOf(PROCESSENTRY32); {function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;} {Process32First 是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()} {获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄 } {参数1说明:hSnapshot} {CreateToolhelp32Snapshot获取进程快照的句柄} {参数2说明:lppe} {TProcessEntry32创建的结构体} {返回值:} {调用成功,返回True,调用失败,返回False。 } if not Process32First(hSnapshot,pe32) then begin ShowMessage('获取第一个进程失败!'); end; {function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;} {Process32Next是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()} {获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄} {参数1说明:hSnapshot} {CreateToolhelp32Snapshot获取进程快照的句柄} {参数2说明:lppe} {TProcessEntry32创建的结构体} {返回值:} {调用成功,返回True,调用失败,返回False。 } ListView1.Clear; repeat item:=ListView1.Items.Add; item.Caption:=IntToStr(pe32.th32ProcessID); item.SubItems.Add(pe32.szExeFile); item.SubItems.Add(IntToStr(pe32.pcPriClassBase)); item.SubItems.Add(IntToStr(pe32.th32ParentProcessID)); until not Process32Next(hSnapshot,pe32); end; procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage('程序名称:获取进程快照'+#13+ '版本:1.0.0.0'+#13+ '日期:2010-10-4'+#13+ '作者:江湖一键客'+#13+ '业务联系QQ:82530662'); end; end.