??? 获得系统进程列表可以通过调用API函数CreateToolhelp32Snapshot( )实现。而AP
I函数Process32First( )和Process32Next( )用于搜索进程。在delphi中TlHelp32单元
实现了这三个API函数的封装以及相关的类型的定义。至于杀死进程,我写的程序是用‘
金山词霸’(xdict.exe)这个进程来做的试验。首先获得系统进程列表,然后将其遍历一
遍。在此过程中若发现‘金山词霸’进程则提示用户是否杀死该进程。如果选择‘是’
则杀掉该进程,如果选择‘否’则什么也不做。程序没有主窗体,当完成进程遍历后便
自动退出。程序在xp下编译通过,源代码如下:
program Project1;
uses
? SysUtils, TlHelp32, Windows;
var
? hSnapshot: THandle;//用于获得进程列表
? lppe: TProcessEntry32;//用于查找进程
? Found: Boolean;//用于判断进程遍历是否完成
? KillHandle: THandle;//用于杀死进程
begin
? hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程
列表
? lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,
???????????????????????????????????????? //需要初始化lppe记录的大小
? Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入l
ppe记录中
? while Found do
? begin
??? if CompareText('xdict.exe', lppe.szExeFile) = 0 then//判断该进程是否为金
山词霸的进程
??? begin
????? if MessageBox(0, '发现了金山词霸进程,是否终止该进程?', '发现进程',
??????? MB_YESNO) = IDYES then
????? begin
??????? //由于我的操作系统是xp,所以在调用TerminateProcess API之前
??????? //我必须先获得关闭进程的权限,如果操作系统是NT以下可以直接中止进程
??????? KillHandle := OpenProcess(PROCESS_TERMINATE, False, lppe.th32Process
ID);
??????? TerminateProcess(KillHandle, 0);//强制关闭进程
??????? CloseHandle(KillHandle);
????? end;
??? end;
??? Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程信息读入
lppe记录中
end.
注:删除‘金山词霸’进程后,由于系统托盘图标没有自动更新,会看到‘金山词霸’
仍在运行的假象,但实际上该进程确实被删除了。
也可以用Notepad来试。