我的程序启动外部程序开发运行后,我自己的程序退出,这个时候外部程序还在进行,如何外部程序运行完后自动退出呢?注这个时候我的程序已退出,不能控制外部程序了。

解决方案 »

  1.   

    在ONCLOSE, 里给他发消息, 或者用ExitProcess, TerminateProcess
    ExitProcess 比 TerminateProcess安全点
      

  2.   

    也可以查找你的内部目标进程,如果找不到了就让外部程序调用TerminateProcess结束自身进程,或者ExitProcess退出
      

  3.   

    rocedure TForm1.Button1Click(Sender: TObject); 
    var 
    sCommandLine: string; 
    bCreateProcess: boolean; 
    lpStartupInfo: TStartupInfo; 
    lpProcessInformation: TProcessInformation; 
    begin 
    sCommandLine := 'D:\TEMP\TEST.EXE'; 
    // 填 StartupInfo 
    FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0); 
    lpStartupInfo.cb := Sizeof(TStartupInfo); 
    lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW; 
    lpStartupInfo.wShowWindow := SW_NORMAL; bCreateProcess := CreateProcess(nil, PChar(sCommandLine), 
    nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, 
    nil, nil, lpStartupInfo, lpProcessInformation); 
    if bCreateProcess then //等外部进程的结束 
    WaitForSingleObject(lpProcessInformation.hProcess, INFINITE); 
    end;
      

  4.   


     var vProcessInfo: TProcessInformation;   //进程信息句柄
          vStartUpInfo: TStartupInfo;
    begin
       FillChar(vStartUpInfo, SizeOf(vStartUpInfo), #0);    vStartUpInfo.dwFlags:=STARTF_USESHOWWINDOW;          vStartUpInfo.wShowWindow:=SW_HIDE;    //SW_HIDE,程序执行时的显示模式
       if CreateProcess(nil, PChar(ChangeFileExt(TextFilePath, '.bat')), nil, nil,False, IDLE_PRIORITY_CLASS,
      nil, nil, vStartUpInfo,vProcessInfo) then//创建执行该批处理文件的进程,并得到进程信息
       begin              //通过进程句柄等待该进程执行完毕 第二个参数表示等待时间
         WaitForSingleObject(vProcessInfo.hProcess, INFINITE);
         CloseHandle(vProcessInfo.hThread);              //关闭进程的主线程句柄
         CloseHandle(vProcessInfo.hProcess);             //关闭进程句柄
       end;  
    end;                                           试试,运行.bat文件没问题,其它的应用程序还没试过通过这种方法启动一个外部程序,即可以让它自动运行完毕退出
      

  5.   

    楼上的这种方法可以搞定的,我上个月遇到过类似的,不过需求比这个更变态
    看这个帖子http://topic.csdn.net/u/20090704/22/95116afc-1a7d-4804-b53e-c806c26d5021.html
    里面用了一个钩子
      

  6.   

    th: Thandle;
    th := findwindow(nil, '运行程序');
    sendmessage(th, wm_close, 0, 0);
      

  7.   

    用sendmessage。还有其他的方法没
      

  8.   

    运行完自己就退出了啊
    ------------------------
    http://bbs.cnsoftware.cn