问题很简单:
提取EXE或DLL的唯一性征,检测“Windows任务管理器”的“进程”列表中的进程对应的EXE或DLL是否符合这一性征,如果符合则杀掉此进程。说明:
1、不要说使用FindWindow
2、不以进程“映象名称”等为依据
3、任意的EXE或DLL

解决方案 »

  1.   

    1)获得映象名
    2)通过名,访问Exe/Dll文件
    3)计算CRC32,这就可以认为是唯一ID
    4)Crc32=某个值,杀之http://lysoft.7u7.net
      

  2.   

    ly的说法没有作过,只弄个这样的东西,有用就用。
    Function KillProcess(FileName : String) : Boolean;
    var
       FSnapshotHandle:THandle;
       FProcessEntry32:TProcessEntry32;
       ProcessID : integer;
       ProcessHndle : THandle;
       Ret , Ret1 : BOOL;
       S : String;
    begin
       Result := False;
       FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
       FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
       Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
       while Ret do begin
          S := Trim(AnsiUpperCase(FProcessEntry32.szExeFile));
          if S=AnsiUpperCase(FileName) then begin
             ProcessID := FProcessEntry32.th32ProcessID;
             ProcessHndle:=OpenProcess(PROCESS_TERMINATE,BOOL(0),ProcessID);
             Ret1 := False;
             Try
               Ret1 := TerminateProcess(ProcessHndle,0);
             except
             end;
             if Ret1 then Result := True;
             Break;
          end;
          Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
       end;
       CloseHandle(FSnapshotHandle);
    end;
      

  3.   


    kiboisme:
    这个方法我知道,不过不是我要的,谢谢ly_liuyang:
    我说的就是这个意思!计算CRC32没问题。
    不过有一点:通过“映象名称”如何能得知文件的完整路径?请指教,多谢
      

  4.   

    GetWindow(Handle, GW_HWNDFIRST);
    IntToStr(GetWindowThreadProcessId(hCurrentWindow, @ident));
    myhandle := OpenProcess(PROCESS_TERMINATE, False, ident);
    TerminateProcess(myhandle, 0);
      

  5.   

    自己创建一个进程的结构。
    根据EXE名称,找进程ID。
    通过API TerminateProcess(进程ID, 0);