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
Application.Terminate 中止应用程序的运行,比较运耐安全。而Halt则完全停止程序,这种完全停止,会忽略任何try finally块、任何finalization语句块以及Delphi编译器自动编旁袭春译优化的内存清理代码的执行,从而造成内存丢失。强烈建议不要使用Halt。使用Application.Terminate 还会触发一些事件,而Halt绝对不会Application.Terminate 不会触发CLOSE事件close是正常的关闭方法FREE与DESTROY不是关闭的方法而是释放所创建的对禅蔽象,不会关闭程序其它的关闭关法是调用API方式的,如结束进程的方式一般一用,正常情况中只要用close欢迎分享,转载请注明来源:内存溢出
评论列表(0条)