CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何关闭一正在运行的程序或进程?

楼主llhh(鱼)2002-09-19 09:04:54 在 Delphi / VCL组件开发及应用 提问

如何关闭一正在运行的程序或进程? 问题点数:60、回复次数:10Top

1 楼zfpcb(我是你的传说)回复于 2002-09-19 09:14:49 得分 10

看看API,对于运行可见的程序,很好办,因为很容易得到他的窗体句柄,的到了窗体句柄就什么事都能做了,如发送消息   WM_SYSCOMMAND   就是一种方法,对于不可见进程可以同法,主要是得到进程句柄,就能很好的操作他了。Top

2 楼shanxia(山峡)回复于 2002-09-19 09:15:31 得分 0

Ctrl+F2:终止程序运行;Top

3 楼s_cube(竹子)回复于 2002-09-19 09:27:07 得分 10

关闭程序   如Foxmail  
  Var  
  I:Thandle;  
  begin  
  I:=FindWindow(nil,'Foxmail');  
  If   I<>0   Then  
  SendMessage(I,WM_close,0,0);  
  end;  
   
  关闭进程  
  try  
      thread.Suspend;  
      thread.Terminate;  
  except  
      ...  
  end;  
  Top

4 楼9igogo(就爱狗狗)回复于 2002-09-19 09:28:14 得分 10

转贴  
  (注意uses   TLHelp32)      
  然后      
  var   lppe:   TProcessEntry32;      
  found   :   boolean;      
  Hand   :   THandle;      
  begin      
  Hand   :=   CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);      
  found   :=   Process32First(Hand,lppe);      
  while   found   do      
  begin      
  ListBox.Items.Add(StrPas(lppe.szExeFile));//列出所有进程。      
  found   :=   Process32Next(Hand,lppe);      
  end;      
  end;      
   
  /////////////////////////////////////////////////////      
  uses   ...   TLHelp32,   ...      
   
  type      
  TForm1   =   class(TForm)      
  ...      
  end;      
   
  var      
  Form1:   TForm1;      
  l   :   Tlist;   ////返回的东东在"L"这个TList中。      
   
  type      
  TProcessInfo   =   Record      
  ExeFile   :   String;      
  ProcessID   :   DWORD;      
  end;      
  pProcessInfo   =   ^TProcessInfo;      
   
  implementation      
   
  {$R   *.DFM}      
   
  procedure   TForm1.FormCreate(Sender:   TObject);      
  var   p   :   pProcessInfo;      
  i   :   integer;      
  ContinueLoop:BOOL;      
  var      
  FSnapshotHandle:THandle;      
  FProcessEntry32:TProcessEntry32;      
  begin      
  l   :=   TList.Create;      
  l.Clear;      
  FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);      
  FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);      
  ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);      
  while   integer(ContinueLoop)<>0   do      
  begin      
  New(p);      
  p.ExeFile   :=   FProcessEntry32.szExeFile;      
  p.ProcessID   :=   FProcessEntry32.th32ProcessID;      
  l.Add(p);      
  ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);      
  end;      
  end;      
   
  procedure   TForm1.FormDestroy(Sender:   TObject);      
  var   p   :   pProcessInfo;      
  i   :   integer;      
  begin      
  With   l   do      
  for   i   :=   Count   -   1   DownTo   0   do      
  begin   p   :=   items[i];   Dispose(p);   Delete(i);   end;      
  end;      
   
  ...      
  end.      
   
  Top

5 楼9igogo(就爱狗狗)回复于 2002-09-19 09:29:18 得分 10

继续转  
  uses   tlhelp32;  
  假设要终止的程序的文件名为:project2.exe,那么例程如下:  
  var  
  lppe:tprocessentry32;  
  sshandle:thandle;  
  hh:hwnd;  
  found:boolean;  
  begin  
  sshandle:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);  
  found:=process32first(sshandle,lppe);  
  while   found   do  
  begin  
      //进行你的处理其中lppe.szExefile就是程序名。  
      if   uppercase(extractfilename(lppe.szExeFile))='PROJECT2.EXE'   then  
      begin  
          hh:=OpenProcess(PROCESS_ALL_ACCESS,true,lppe.th32ProcessID);  
          TerminateProcess(hh,0);  
      end;  
      found:=process32next(sshandle,lppe);  
  end;  
  end;  
  ********************  
  HANDLE   hProcess  
  Windows   NT/2000:   The   handle   must   have   PROCESS_TERMINATE   access.    
  For   more   information,   see   Process   Security   and   Access   Rights.    
   
  所以要先使用    
  DWORD   SetSecurityInfo(  
      HANDLE   handle,                                           //   handle   to   object  
      SE_OBJECT_TYPE   ObjectType,                   //   object   type  
      SECURITY_INFORMATION   SecurityInfo,   //   buffer  
      PSID   psidOwner,                                         //   new   owner   SID  
      PSID   psidGroup,                                         //   new   primary   group   SID  
      PACL   pDacl,                                                 //   new   DACL  
      PACL   pSacl                                                   //   new   SACL  
  );  
   
  Top

6 楼s_cube(竹子)回复于 2002-09-19 09:30:25 得分 0

倒     没看清问题      
   
  第二段是关闭线程Top

7 楼xiejiye(菩提树业)回复于 2002-09-19 09:47:08 得分 0

进来拿分!!!Top

8 楼air_line(永恒的心)回复于 2002-09-19 09:48:04 得分 10

application类的  
  halt   or     terminate方法。Top

9 楼wxzcsut(小王)回复于 2002-09-19 10:12:27 得分 0

halt(integer);Top

10 楼lyzq(海)回复于 2002-09-19 10:46:41 得分 10

application.terminateTop

相关问题

  • 窗口关闭后进程中程序还在运行~
  • 用vb关闭外部正在运行的程序(进程),多谢,很急!~
  • 怎样判断程序已经运行?为什么我把程序关闭后,在进程里却没有关闭?
  • 100分热情放送--不在对方计算上运行程序,如何关闭对方计算机的进程?
  • 我想实现这样一个功能,程序运行时要先提示用户手工打开的EXCEL(进程中)是否已经关闭
  • 怎么在一个运行程序中关闭另一个运行的程序
  • 如何杀死正在运行的程序/进程???
  • 怎样确定我的程序已在进程中运行了?
  • 怎样让程序运行,但在进程中不显示!
  • 怎样才能彻底的结束运行程序的进程

关键词

  • lppe
  • fprocessentry
  • 进程
  • fsnapshothandle
  • continueloop
  • 程序
  • 句柄
  • 运行
  • szexefile
  • 关闭

得分解答快速导航

  • 帖主:llhh
  • zfpcb
  • s_cube
  • 9igogo
  • 9igogo
  • air_line
  • lyzq

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo