delphi杀进程的两种方式


本文整理自网络,侵删。

 第一种:比较简单,根据标题,找到窗口,再找到进程,杀死进程

 

procedure KillProgram(WindowTitle : string);  

const  
  PROCESS_TERMINATE = $0001;  
var  
  ProcessHandle : THandle;  
  ProcessID: Integer;  
  TheWindow : HWND;  
begin  
  TheWindow := FindWindow(nil, PChar(WindowTitle));  
  GetWindowThreadProcessID(TheWindow, @ProcessID);  
  ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);  
  TerminateProcess(ProcessHandle,4);  
end;  

procedure KillProgram(WindowTitle : string);
const
  PROCESS_TERMINATE = $0001;
var
  ProcessHandle : THandle;
  ProcessID: Integer;
  TheWindow : HWND;
begin
  TheWindow := FindWindow(nil, PChar(WindowTitle));
  GetWindowThreadProcessID(TheWindow, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
  TerminateProcess(ProcessHandle,4);
end;
第二种:复杂一点,不过可获取的信息更多,其他功能的时候可以参考一下

 

function KillTask(ExeFileName: string): integer;  

const  
  PROCESS_TERMINATE=$0001;  
var  
  ContinueLoop: BOOL;  
  FSnapshotHandle: THandle;  
  FProcessEntry32: TProcessEntry32;  
begin  
  result := 0;  
  
  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(ExeFileName))  
     or (UpperCase(FProcessEntry32.szExeFile) =  
         UpperCase(ExeFileName))) then  
      Result := Integer(TerminateProcess(OpenProcess(  
                        PROCESS_TERMINATE, BOOL(0),  
                        FProcessEntry32.th32ProcessID), 0));    
    ContinueLoop := Process32Next(FSnapshotHandle,  
                                  FProcessEntry32);  
  end;  
  
  CloseHandle(FSnapshotHandle);  
end;   

function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := 0;

  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(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL(0),
                        FProcessEntry32.th32ProcessID), 0));  
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;

  CloseHandle(FSnapshotHandle);
end; 

另,word也可以根据标题结束进程,word的标题的规则是application的title + "-" + window的title

相关阅读 >>

Delphi 读写文本

Delphi 服务端日志记录

Delphi 随机程序名

Delphi unigui form控件跳转

Delphi研究之驱动开发篇(四)--使用系统内存堆

Delphi 得到ip三个值

Delphi xe7中stringgrid组件的使用

Delphi 正则提取txt中的email 数据

Delphi编程获取系统当前进程、窗口句柄、文件属性

Delphi 在电脑屏幕上显示图片

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...