delphi如何强制结束进程?

delphi如何强制结束进程?,第1张

强制结束进程有两种.

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

endprocedure 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

不知道你的强制退出程序,是不是你自己编写的,造成死循环产生的,想强制中断调试.

如果这样,你按 ctrl +F2建就可以退出了.

如果是程序循环,强制退出循环程序,就直接 exit就可以,

1、break 强制退出循环(只能放在循环中),用于从For语句,while语句或repeat语句中强制退出。

2、continue 用于从For语句,while语句或repeat语句强行结束本次称称循环,并开始下一次循环。

3、exit 用于从当前代码块中退出。若该代码为主程序,则终止该程序,若是函数或过程,则立即该过程或函数。

4、abort 中止程序的运行,产生不报错的异常信息。跳出祖先模块。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12081714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存