您的位置:首页 > 其它

根据进程名,查找并结束进程

2014-10-18 14:13 453 查看
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.


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: