在执行程序开始运行时,怎样判断外部程序正在运行,并且关闭它!!这段代码应该放在程序的什么地方?谢谢各位!!

解决方案 »

  1.   

    var hwnd1:hWnd;hwnd1:=FindWindow('待查应用程序主窗体类名','待查应用程序主窗体Caption');//两个参数有一个就行
    if hwnd1<>0 then
      SendMessage(hwnd1,WM_CLOSE,0,0);
      

  2.   

    这段代码可以放的地方:
    1。 Application.Initialize;  之后,在工程文件.dpr里。
    2。 主窗口的Oncreate事件里。
    3。 主窗口的onShow事件里。
      

  3.   

    若程序在onclose事件中自行扑获这一消息,则会出现该程序的程序代码部分。
    如Delphi中的onClose事件中经常会用到
      if messagebox(...)=IDYES then
      begin
        Action:=caFree;
        ....
      end
      else
        Action:=caNone;  
     
    但如下的代码,便没有这种尴尬事发生,代码如下:
    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;调用方法
      KillTask('Client.exe');
    这里client.exe 是在进程管理器中的映像名称