zoukankan      html  css  js  c++  java
  • Delphi监视进程并结束进程

    监视进程并结束进程在很多地方都用到这里借前人的经验写了个小例子:

    以QQ的进程qq.exe为例

    关键代码如下:


    function CheckTask(ExeFileName: string): Boolean;
    const
    PROCESS_TERMINATE=$0001;
    var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
    begin
    result := False;
    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 := True;
          ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
    end;
    end;

    function KillTask(ExeFileName:string):integer;
    const 
    PROCESS_TERMINATE = $0001; 
    var
    ContinueLoop: BOOLean;
    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;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if CheckTask(’qq.exe’)=true then
    KillTask(’qq.exe’)
    else
    Label1.Caption:=’进程不存在,监视中...’;
    end;
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if CheckTask(’qq.exe’)=true then
    Label1.Caption:=’进程正在运行中...’
    else
    Label1.Caption:=’进程不存在,监视中...’;
    end;

    function CheckTask

    function KillTask这两个函数在网上找的,这个例子一看就懂的,下面给出测试效果:

  • 相关阅读:
    成为Java GC专家系列(3) — 如何优化Java垃圾回收机制
    成为JavaGC专家Part II — 如何监控Java垃圾回收机制
    JAVA缓存的实现
    Lock Less Java Object Pool
    跟屌丝大哥学习设计模式--享元模式
    数据库 -- 由数据库连接池引出的三种设计模式
    优秀博客推荐:各种数据结构与算法知识入门经典
    学习总结
    洛谷P3360偷天换日(树形DP)
    疯子的算法总结14--ST算法(区间最值)
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4643093.html
Copyright © 2011-2022 走看看