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.

