delphi 结束进程

在网上搜了一下delphi结束进程的代码,发现当要结束的进程名是当前的进程并且该程序开了多个的话,会因为当前进程在结束其他进程前把自己关掉而不能结束所有同名的进程,所以修改了一下:

注:TProcessEntry32 需要引用单元 uses TLHelp32;

 

function killProcess(iProcessName:string):boolean;
var
  HandleSnap:THandle;//用于获得进程列表
  killHandle:THandle;
  processEntry:TProcessEntry32;//用于查找进程
  found:boolean;
  count:integer;
  selfProcessID:cardinal;

begin
  HandleSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表
  processEntry.dwSize:=sizeof(TProcessEntry32);/在调用Process32First API之前,需要初始化lppe记录的大小

  selfProcessID:=getCurrentProcessID();//获得当前Delphi应用程序的进程ID

  count:=0;
  found:=process32First(HandleSnap,processEntry);//将进程列表的第一个进程信息读入记录中
  while(found)do
  begin
    if((uppercase(extractFileName(processEntry.szExeFile))=upperCase(iProcessName))
      or(uppercase(processEntry.szExeFile)=upperCase(iProcessName)))then
    begin
      if(processEntry.th32ProcessID<>selfProcessID)then//如果进程是当前进程,则不结束
      begin
        killHandle:=OpenProcess(PROCESS_TERMINATE, False, processEntry.th32ProcessID);
        TerminateProcess(killHandle,0);
      end;
      inc(count);
    end;
    found:=process32Next(HandleSnap,processEntry);//将进程列表的下一个进程信息读入记录中
  end;

  closeHandle(handleSnap);

  //搜索完所有进程后,如果要结束的进程名与当前应用程序的名字一样,则结束当前进程
  if(uppercase(iProcessName)=uppercase(extractFileName(application.ExeName)))then
  begin
    killHandle:=OpenProcess(PROCESS_TERMINATE, False, selfProcessID);
    TerminateProcess(killHandle,0);
  end;
end;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值