获取进程快照

点击下载演示工程

获取进程快照

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.



你可能感兴趣的:(进程)