命令行程序是我在程序中用winexec调用起来,但它返回的结果我却无法得到,能否在程序中得到命令行程序的返回结果(就好像DOS窗口直接运行一样)?我需要得到的命令行程序运行的过程,包括所有步骤,中间可能需要用户干预,我的程序可以根据返回结果向他发送字符。

解决方案 »

  1.   

    难道不能做吗?我看到很多的编程软件都可以做到的,比如JAVA的编译命令是javac,其他的程序如jcreater、JB等就是调用javac并把本来显示在命令行下的信息全都显示在界面中。
    vc好像也是这样。
      

  2.   

    有个例子,我发给你,你的e-mail呢?
      

  3.   

    可以利用管道做到。
    具体例子没有,自己看看MSDN。
      

  4.   

    有个简单的笨方法,可以用输出转向啊,比如 >a.txt,然后你可以把输出从TXT文件中得到;
      

  5.   

    Michaelyfj(星星还是那颗星星) ,
    也发给俺,[email protected]
      

  6.   

    那使用CreateProcess函數來代替winexec
      

  7.   

    to: Michaelyfj(星星还是那颗星星)
    我的email:[email protected]。to:outer2000(天外流星)
    我用过这种方法,首先不适合有数据交互的情况,比如程序提示你输入x=?,而且不知为什么,我的命令行程序格式没有错误,但将结果输出到a.txt时却发现了系统提示的格式错误。
    它只适用于简单的情况。to:Wally_wu(韦利)
    具体该怎么用呢?我可以查查帮助,能否给各例子?谢谢。
      

  8.   

    //给你参考一下
    //执行处部可执行文件
    Function LaunchApp(pExePath,WorkDir:String;ShowWindow,WaitFlag:Boolean):Boolean;
    var ExePath : array[0..512] of char;
        StartupInfo:TStartupInfo;
        ProcessInfo:TProcessInformation;
    begin
      StrPCopy(exePath, pExePath);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if ShowWindow then
        StartupInfo.wShowWindow := 1
      else
        StartupInfo.wShowWindow := 0;
      if not CreateProcess(nil,
                          ExePath,
                          nil,
                          nil,
                          false,
                          CREATE_NEW_CONSOLE or
                          NORMAL_PRIORITY_CLASS,
                          nil,
                          nil,
                          StartupInfo,
                          ProcessInfo) then  begin
        Result:=False;
        Exit;
      end else begin
        if WaitFlag then
          WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
        Result:=True;
      end;
    end;