RSS订阅 | 匿名投稿
您的位置:网站首页 > 进程 > 正文

Delphi获得当前所有进程名,进程PID

作者:admin 来源:未知 日期:2010/5/23 9:39:49 人气: 标签:

主窗体如下所示

代码如下

// 获取系统当前进程名和进程ID,
//注:应引用"TLHelp32"单元"use TLHelp32"。

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,TLHelp32;

type
TForm2 = class(TForm)
    ListBox1: TListBox;
    ListView1: TListView;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form2: TForm2;
ContinueLoop:BOOL;       //是否继续循环
FSnapshotHandle:THandle; //进程快照句柄
FProcessEntry32:TProcessEntry32; //进程入口的结构体信息

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
//在listview中显示进程
var
NewItem: TListItem;
Summ:integer;
begin
ListView1.Items.BeginUpdate;
ListView1.Items.Clear;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//CreateToolhelp32Snapshot函数得到进程快照
FProcessEntry32.dwSize := Sizeof(FProcessEntry32); //初始化
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
//Process32First 得到一个系统快照里第一个进程的信息
Summ := 0;
while ContinueLoop do
    begin
    Summ := Summ + 1;
    NewItem := ListView1.Items.Add;   //在ListView1显示
    NewItem.ImageIndex := -1;
    NewItem.Caption := ExtractFileName(FProcessEntry32.szExeFile); //进程名称
    //??NewItem.Caption := ExtractFilePath(FProcessEntry32.szExeFile);//进程名称
    NewItem.subItems.Add(FormatFloat('00', Summ));//序号
    NewItem.subItems.Add(IntToStr(FProcessEntry32.th32ProcessID));//进程ID
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
ListView1.Items.EndUpdate;

Label1.Caption:='进程数:'+inttostr(ListView1.Items.Count);

end;

procedure TForm2.Button2Click(Sender: TObject);
//在listbox中显示进程 id
var
ProcessName : string; //进程名
ProcessID : integer; //进程表示符
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建一个进程快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); //得到系统中第一个进程
//循环例举
while ContinueLoop do
begin
    ProcessName := FProcessEntry32.szExeFile;
    ProcessID := FProcessEntry32.th32ProcessID;
    Listbox1.Items.add('应用程序名 :'+ProcessName +'#进程ID:'+ inttostr(ProcessID));
    ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;

procedure TForm2.FormCreate(Sender: TObject);

begin
//对ListView1的初始化
ListView1.ViewStyle:=vsReport; //设置ListView的显示方式 不设置这种方式不显示列头
ListView1.Columns.Add;       //添加第一列
ListView1.Column[0].Caption:='进程名';
ListView1.Column[0].AutoSize:=false;
ListView1.Column[0].Width:=100;
ListView1.Column[0].Alignment:=taLeftJustify;//左对齐
ListView1.Columns.Add;       //添加第二列
ListView1.Column[ListView1.Columns.Count-1].Caption:='序号';
ListView1.Column[ListView1.Columns.Count-1].AutoSize:=true;
ListView1.Column[ListView1.Columns.Count-1].Alignment:=taLeftJustify;//左对齐
ListView1.Columns.Add;       //添加第三列
ListView1.Column[ListView1.Columns.Count-1].Caption:='ID';
ListView1.Column[ListView1.Columns.Count-1].AutoSize:=true;
ListView1.Column[ListView1.Columns.Count-1].Alignment:=taLeftJustify;//左对齐


end;
end.

运行效果如下


读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址: