用API可以做到吧,大家帮忙找找吧:)

解决方案 »

  1.   

    function WinExecAndWait32(FileName:String; Visibility :integer = SW_HIDE):integer;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      WorkDir:String;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
      ExecResult:DWORD;
    begin
      StrPCopy(zAppName,FileName);
      GetDir(0,WorkDir);
      StrPCopy(zCurDir,WorkDir);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);  StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;  if not CreateProcess(nil,
                          zAppName,{ pointer to command line string }
                          nil,{ pointer to process security attributes }
                          nil,{ pointer to thread security attributes }
                          false,{ handle inheritance flag }
                          CREATE_NEW_CONSOLE or { creation flags }
                          NORMAL_PRIORITY_CLASS,
                          nil,{ pointer to new environment block }
                          nil,{ pointer to current directory name }
                          StartupInfo,{ pointer to STARTUPINFO }
                          ProcessInfo) then
        Result := -1 { pointer to PROCESS_INF }
      else
      begin
        WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess,ExecResult);
        Result := ExecResult;
      end;
    end;  
    回复人: youmingzhihuo(幽冥之火) (2002-1-22 20:26:06)  得0分 
    下面是一个完整的模块,加分吧!
    function WinExecAndWait32(FileName:String; Visibility :integer = SW_HIDE):integer;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      WorkDir:String;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
      ExecResult:DWORD;
    begin
      StrPCopy(zAppName,FileName);
      GetDir(0,WorkDir);
      StrPCopy(zCurDir,WorkDir);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);  StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;  if not CreateProcess(nil,
                          zAppName,{ pointer to command line string }
                          nil,{ pointer to process security attributes }
                          nil,{ pointer to thread security attributes }
                          false,{ handle inheritance flag }
                          CREATE_NEW_CONSOLE or { creation flags }
                          NORMAL_PRIORITY_CLASS,
                          nil,{ pointer to new environment block }
                          nil,{ pointer to current directory name }
                          StartupInfo,{ pointer to STARTUPINFO }
                          ProcessInfo) then
        Result := -1 { pointer to PROCESS_INF }
      else
      begin
        WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess,ExecResult);
        Result := ExecResult;
      end;
    end;
     
      

  2.   

    我没时间看楼上这位的源码了,不过我前两天跟用过的一个外部调用的API是ShellExcet具体参数你可以查WINSDK,不过要得到其是否运行结束,可能要用DDE等之类的进程之间的通信吧
      

  3.   

    调用另一个程序用winexec
    ShellExecute  
    CreateProcess
    等待结束用
    WaitforSingleObject
    或扫描进程,查找窗体