unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Tlhelp32;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function FindProcess(ProcessName: String): Boolean;
var
Snap: THandle;
Lp: Boolean;
PE: TProcessEntry32;
begin
Result := False;
snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if snap <= 0 then begin
Exit;
end;
PE.dwSize := SizeOf(TProcessEntry32);
Lp := Process32First(snap,PE);
while Lp do begin
if PE.szExeFile = ProcessName then begin
Result := True;
Break;
end;
Lp := Process32Next(snap,PE);
end;
CloseHandle(snap);
end;
//函数
function KillProcess(ProcessName: string): Boolean;
const
PROCESS_TERMINATE = $0001;
var
Snap: THandle;//存放CreateToolhelp32Snapshot()
PE: TProcessEntry32;//存放PROCESSENTRY32结构
Lp: Boolean;//存放Process32First()、Process32Next()
Op: THandle;//存放OpenProcess()
begin
Result := False;
snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得进程快照
if snap <= 0 then begin
Exit;
end;
PE.dwSize := SizeOf(TProcessEntry32);//为dwSize赋值
Lp := Process32First(snap,PE);//枚举当前的进程
while Lp do begin
if PE.szExeFile = ProcessName then//进程名与szExeFile比较
begin
Op := OpenProcess(PROCESS_TERMINATE,False,PE.th32ProcessID);//打开句柄
Result := TerminateProcess(Op,0);//结束进程
end;
Lp := Process32Next(snap,PE);//枚举当前的进程
end;
CloseHandle(snap);//关闭句柄
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Add('程序开始运行');
if FindProcess('notepad.exe') then begin
ListBox1.Items.Add('发现进程notepad.exe');
if KillProcess('notepad.exe') then begin
ListBox1.Items.Add('结束进程notepad.exe成功');
end else begin
ListBox1.Items.Add('结束进程notepad.exe失败');
end;
end else begin
ListBox1.Items.Add('未发现进程notepad.exe');
end;
end;
end.