3个回答
展开全部
强制结束进程有两种.
1.结束自身程序就使用
Application.Terminate;
2.结束其它正在执行的程序.
使用进程快照的方法找到相关进程,然后结束.
function TFrmImportExcel.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;procedure TFrmImportExcel.EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
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;
//调用
if FindProcess('EXCEL.EXE') then
begin
if MsShow('检测到打开了Excel,是否让其关闭?',2)<>6 then Exit;
EndProcess('EXCEL.EXE');
end;
1.结束自身程序就使用
Application.Terminate;
2.结束其它正在执行的程序.
使用进程快照的方法找到相关进程,然后结束.
function TFrmImportExcel.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;procedure TFrmImportExcel.EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
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;
//调用
if FindProcess('EXCEL.EXE') then
begin
if MsShow('检测到打开了Excel,是否让其关闭?',2)<>6 then Exit;
EndProcess('EXCEL.EXE');
end;
展开全部
强制结束进程有两种.
1.结束自身程序就使用
Application.Terminate;
2.结束其它正在执行的程序.
使用进程快照的方法找到相关进程,然后结束.
function TFrmImportExcel.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;procedure TFrmImportExcel.EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
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;
//调用
if FindProcess('EXCEL.EXE') then
begin
if MsShow('检测到打开了Excel,是否让其关闭?',2)<>6 then Exit;
EndProcess('EXCEL.EXE');
end;
1.结束自身程序就使用
Application.Terminate;
2.结束其它正在执行的程序.
使用进程快照的方法找到相关进程,然后结束.
function TFrmImportExcel.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;procedure TFrmImportExcel.EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
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;
//调用
if FindProcess('EXCEL.EXE') then
begin
if MsShow('检测到打开了Excel,是否让其关闭?',2)<>6 then Exit;
EndProcess('EXCEL.EXE');
end;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询