winexec执行了一个bcp命令!(耗时十多秒)怎么判断这个命令结束?Winexec只是调用一个外部的命令,如何判断其结束!

解决方案 »

  1.   

    使用CreateProcess可以实现你想要的操作!!!但是比较麻烦,不是三言两语能说明白的!!!
      

  2.   

    是呀 CreateProcess复杂多了 但是更强大。。呵呵 不过WinExec,ShellExcute 也都是由CreateProcess实现的
      

  3.   

    unit Exec_Unit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TExecForm = class(TForm)
        Execute: TButton;
        ExeName: TEdit;
        procedure ExecuteClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Function Exec(FileName:string; Visibility:integer):integer;
      end;var
      ExecForm: TExecForm;implementation{$R *.DFM}{ TForm1 }function TExecForm.Exec(FileName: string; Visibility: integer): integer;
    var
      zAppName: array [0..512] of Char;
      zCurDir: array [0..255] of Char;
      WorkDir: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      ExitCode: Cardinal;
    begin
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
      StartupInfo.cb := SizeOf(StartupInfo);
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil, zAppName, nil, nil, false, Create_New_Console or Normal_priority_class,
                           nil, nil, StartupInfo, ProcessInfo) then Result:=-1
         else begin
                WaitForSingleObject(ProcessInfo.hProcess, Infinite);
                GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
                Result := ExitCode;
              end;
    end;procedure TExecForm.ExecuteClick(Sender: TObject);
    begin
      Exec(ExeName.Text, 0);
      ShowMessage('Ruturn');
    end;end.
    http://lysoft.7u7.net