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 stringgrid 实例3: 本例功能: 1、修改 tstringgrid的默认宽与高; 2、添加行; 3、确认当前单元并赋值.

Delphi tms web core 判断是否包含汉字

winapi 字符及字符串函数(12): lstrlen - 串长度

Delphi idhttp批量上传图片

Delphi 关于字符串, 之前没这样用过

Delphi windows 编程[4] - 学习窗体生成的过程四

Delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法

Delphi winapi: inflaterect - 改变矩形大小

Delphi应用程序 paramstr()带有参数

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



打赏

取消

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

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

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

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

评论

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