Windows 下 Delphi 程序杀死其它进程和自杀

Delphi 程序如果能杀死其它进程,就能杀死自己 --- 自杀。

自杀的理由是什么呢?程序大了,代码太多,很多地方资源释放关系里不清楚(本质原因还是架构不好,再加上接口的相互引用 -- 接口相互引用的问题,现在已经有解决方案),导致程序在退出时,很可能出现 AV 错误。Duang 的一下弹一个 AV 异常窗口给用户,很不好看。因此,程序退出时,在程序员用自己的代码把该保存的数据都提交保存了以后,干脆直接自杀,进程立马死掉退出,不会去执行一些对象释放过程,也就不会有 AV 错误。


在 Windows 底下玩这些东西,必须要用到 Windows 的 API.

闲话少说,上代码:

procedure TForm1.Button1Click(Sender: TObject); 
var 
  ProcID: DWord; 
  H, ProH: THandle; 
  S: string; 
begin 
{----------------------------------------------------------------------------- 
  这段代码测试如何用 WINDOWS API 杀死一个进程。测试通过。记事本的确被杀死了。 
  经过测试,也可以杀死自己。 
-----------------------------------------------------------------------------} 
  S := Self.Caption; 
  H := FindWindow(0, PChar(S)); 
  if H = 0 then 
  begin 
    ShowMessage('找不到'); 
    Exit; 
  end; 


  GetWindowThreadProcessId(H, ProCID); 


 

  ProH := OpenProcess(PROCESS_ALL_ACCESS, True, ProcID); 
  TerminateProcess(ProH, 0); 
end; 


杀死自己,自己的句柄其实就是 Application.Handle,因此可以这样写:

procedure TForm1.Button1Click(Sender: TObject);
var
  ProcID: DWord;
  H, ProH: THandle;
begin
  GetWindowThreadProcessId(Application.Handle, ProCID);
  ProH := OpenProcess(PROCESS_ALL_ACCESS, True, ProcID);
  TerminateProcess(ProH, 0);
end;


以下代码,是在我的一个正式项目里使用的,工作得非常良好:


procedure TMainClientForm.KillSelf;
var
  ProcID: DWord;
  H, ProH: THandle;
  S: string;
begin
{-----------------------------------------------------------------------------
  这段代码用 WINDOWS API 杀死一个进程。这里是杀死自己,使得程序退出简单快速。
-----------------------------------------------------------------------------}
  S := Self.Caption;

  H := FindWindow(0, PChar(S));

  if H > 0 then
  begin
    GetWindowThreadProcessId(H, ProCID);

    ProH := OpenProcess(PROCESS_ALL_ACCESS, True, ProcID);
    TerminateProcess(ProH, 0);
  end;
end;



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值