Delphi中查找进程及强行结束进程的方法
2013-04-27 15:43
399 查看
unit UDealProcess;
interface
function FindProcess(AFileName: string): boolean;
procedure EndProcess(AFileName: string);
implementation
uses
Windows,TLHelp32 , SysUtils,ShellAPI;
{
//查找进程
//AFileName :进程名 ,reg:A.exe
}
function FindProcess(AFileName: string): boolean;
var
hSnapshot: THandle; //用于获得进程列表
lppe: TProcessEntry32; //用于查找进程
Found: Boolean; //用于判断进程遍历是否完成
KillHandle: THandle; //用于杀死进程
begin
Result := False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //获得系统进程列表
lppe.dwSize := SizeOf(TProcessEntry32); //在调用Process32First API之前,需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe); //将进程列表的第一个进程信息读入ppe记录中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile)) = UpperCase(AFileName)) or (UpperCase(lppe.szExeFile) = UpperCase(AFileName)))
then
begin
{if MsShow('发现打开Excel,是否将其关闭?',2)=6 then
begin
//由于我的操作系统是xp,所以在调用TerminateProcess API之前
//我必须先获得关闭进程的权限,如果操作系统是NT以下可以直接中止进程
KillHandle := OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID);
TerminateProcess(KillHandle, 0);//强制关闭进程
CloseHandle(KillHandle);
end;}
Result := True;
end;
Found := Process32Next(hSnapshot, lppe); //将进程列表的下一个进程信息读入lppe记录中
end;
end;
{
//强行结束进程
//AFileName :进程名 ,reg:A.exe
}
procedure EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: Boolean;
FSnapShotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapShotHandle := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(AFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(AFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
end.
uses ----------------
procedure TUpdateForm.FormShow(Sender: TObject);
begin
while (FindProcess('KillProcess.exe') ) do
begin
EndProcess('KillProcess.exe') ;
end;
end;
转自:http://hi.baidu.com/wissly/item/cc6b6e11644209e45f53b195
interface
function FindProcess(AFileName: string): boolean;
procedure EndProcess(AFileName: string);
implementation
uses
Windows,TLHelp32 , SysUtils,ShellAPI;
{
//查找进程
//AFileName :进程名 ,reg:A.exe
}
function FindProcess(AFileName: string): boolean;
var
hSnapshot: THandle; //用于获得进程列表
lppe: TProcessEntry32; //用于查找进程
Found: Boolean; //用于判断进程遍历是否完成
KillHandle: THandle; //用于杀死进程
begin
Result := False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //获得系统进程列表
lppe.dwSize := SizeOf(TProcessEntry32); //在调用Process32First API之前,需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe); //将进程列表的第一个进程信息读入ppe记录中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile)) = UpperCase(AFileName)) or (UpperCase(lppe.szExeFile) = UpperCase(AFileName)))
then
begin
{if MsShow('发现打开Excel,是否将其关闭?',2)=6 then
begin
//由于我的操作系统是xp,所以在调用TerminateProcess API之前
//我必须先获得关闭进程的权限,如果操作系统是NT以下可以直接中止进程
KillHandle := OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID);
TerminateProcess(KillHandle, 0);//强制关闭进程
CloseHandle(KillHandle);
end;}
Result := True;
end;
Found := Process32Next(hSnapshot, lppe); //将进程列表的下一个进程信息读入lppe记录中
end;
end;
{
//强行结束进程
//AFileName :进程名 ,reg:A.exe
}
procedure EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: Boolean;
FSnapShotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapShotHandle := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(AFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(AFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
end.
uses ----------------
procedure TUpdateForm.FormShow(Sender: TObject);
begin
while (FindProcess('KillProcess.exe') ) do
begin
EndProcess('KillProcess.exe') ;
end;
end;
转自:http://hi.baidu.com/wissly/item/cc6b6e11644209e45f53b195
相关文章推荐
- delphi查找和结束进程
- delphi查找和结束进程
- Android下结束进程的方法
- Android结束进程的方法
- Android 结束进程的方法forceStopPackage
- Delphi获取其它进程窗口句柄的3种方法
- Linux # Kubuntu 假死,结束进程方法
- SAP里会话结束方法(杀死进程)
- Android下结束进程的方法
- Android 结束进程的几种方法
- Excel.exe进程结束方法
- Android结束进程的方法讨论
- Delphi获取其它进程窗口句柄的3种方法
- Delphi 如何让程序获取权限结束指定进程?
- Android下结束进程的方法
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
- [转]应用层结束进程方法
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
- XP/WIN7系统中删除已结束进程托盘图标的方法
- adb server无法启动方法,结束占用端口的进程