知道运行的可执行文件名,要如何通过Delphi程序来实现程序的关闭?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      h:HWnd;
    begin
      h := FindWindow(nil,'邮件群发系统');
      if h <> 0  then
      sendmessage(h,WM_CLOSE,0,0);
    end;
      

  2.   

    可是并不知道"'邮件群发系统'"这个啊?只知道exe文件名
      

  3.   

    '邮件群发系统'就是文件名吗?我认为这个是程序的CLASSNAME,而不是exe文件名
      

  4.   

    枚举进程找到PID不就好搞了嘛
      

  5.   


    '邮件群发系统'就是文件名吗?我认为这个是程序的CLASSNAME,而不是exe文件名--------------------------------
    你试一下不就明了了吗
      

  6.   

    CreateToolHelp32SnapShot,Snap他的MODULE名字,也就是你的那个exe文件名,然后Kill掉,网上代码满天飞!
      

  7.   

    function  MyFun_GetProcessID(ProcessName:  string):  Cardinal;
    var
       FSnapshotHandle:  THandle;
       FProcessEntry32:  TProcessEntry32;
       Ret:  Boolean;
       TmpProcessName:  string;
       TmpProcessID:  DWORD;
    begin
       TmpProcessID  :=  0;                                        //如果没有找到
       //创建系统快照
       FSnapshotHandle  :=  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,  0);
       //先初始化  FProcessEntry32  的大小
       FProcessEntry32.dwSize  :=  SizeOf(FProcessEntry32);
       Ret  :=  Process32First(FSnapshotHandle,  FProcessEntry32);
       //循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程
       while  Ret  do
       begin
           TmpProcessName  :=  ExtractFileName(FProcessEntry32.szExeFile);
           if  TmpProcessName  =  ProcessName  then
           begin
               TmpProcessID  :=  FProcessEntry32.th32ProcessID;
               Break;
           end;
           Ret  :=  Process32Next(FSnapshotHandle,  FProcessEntry32);
       end;
       CloseHandle(FSnapshotHandle);
       Result  :=  TmpProcessID;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
       ProcessID:  THandle;
       FHandle:  THandle;
    begin
       ProcessID  :=  MyFun_GetProcessID('你的应用程序的文件名');
       FHandle  :=  OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID);
       TerminateProcess(FHandle,0);
    end;用这种方式,可以强行关闭你指定的exe文件,你试试看!
      

  8.   


    var
      h:HWnd;
    begin
      h := FindWindow(nil,'你的窗口名称');
      if h <> 0  then
      sendmessage(h,WM_CLOSE,0,0);
      

  9.   

    杀死进程的函数,传个exe文件在进程里显示的名字就行了
    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;
      

  10.   

    好东西,
    先根据文件名找是否有该进程,有则取得其句柄,在发送CLOSE消息
      

  11.   

    procedure TF_Update.KillProcess(AProcName: string);//AProcName为进程的名称
    var
      lppe: TProcessEntry32;
      found: boolean;
      Hand: THandle;
    begin
      Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
      found := Process32First(Hand, lppe);
      while found do
      begin
        if UpperCase(AProcName) = UpperCase(lppe.szExeFile) then
        begin
          TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID), 0);
          found := false;
        end
        else
          found := Process32Next(Hand, lppe);
      end;
    end;