问题:现有一Form窗体程序(开发语言c、c++、c#不限),欲调用控制台程序test.exe  现可以调用API函数利用“管道”获取到输出内容。但是如何能够较灵活的控制test.exe 的输入呢?因为test.exe需要人为输入控制内容,比如输入“esc”退出等。msdn上面的“管道”例子尝试了没有成功,正郁闷中....下面方法除外:1.调用批处理
2.将控制台嵌入到Form中
3.在硬盘或其他存储介质中创建临时文件进行数据交流
4.在Form中创建控制台,只ConsoleRead\ConsoleWrite等.....
最先给出最可行的解决方案者,得分100分
方案可行者,前两名,每人50分
其余酌情分散100分

解决方案 »

  1.   

    控制台程序是自己写的吗?可以尝试用Socket通讯试试。
      

  2.   


    控制台是别人写的,我动不了。只能原封不动的用文本框CEdit、TextBox、RichTexxtBox实现输入和输出
      

  3.   

    console程序,获得输入内容后,通过管道发送给Form程序,不会有没问题的。
    msdn的例子里是读取文件的内容互相发送,再发送别的东西肯定可以。LZ说的没有成功,应该是代码写的有问题。
      

  4.   

    ProcessStartInfo..RedirectStandardInput
    Process.StandardInput 
      

  5.   

    可以用Socket通信模拟一个控制台程序test.exe,里面的协议和命令(如:esc)自定义
    其实也就类似用Socket模拟Ftp
      

  6.   

    http://topic.csdn.net/u/20100531/22/7b90157f-b9a8-4153-a1e6-da17712ea4a9.html
      

  7.   

    人为控制输入的  不知道在什么地方输入,,如果是我的话 我会让他在Form里
    然后通过 Process 传给cmd  然后再把参数放到控制台调用 test.exe
      

  8.   


    输入的数据在你的程序里的 TextBox 输入   你通过他输入的东西 用 Process传给cmd
    这样的话 你中间可以截取他输入的东西,,比如你不想让他输入 esc  这个是退出 
    那你中间判断下 如果是esc关闭某程序 或者怎么样的只是一点点构思,,不知道对不对
      

  9.   

    我有一个类似的项目,form在满足条件的时候启动一个console控制台程序,执行过程中form和console可以实现交互,用的.Net Remoting技术,实现的很好,楼主可以参考一下
      

  10.   

    Remoting,基本上就是为楼主的需求量身定做的
      

  11.   


    如果控制台式如下的内容呢?char c;
    while(c=getchar())
    {
        if(c=='a')
           printf("这是a\n");
         else
           printf("不是a\n");
    }
      

  12.   

    如果控制台程序:test.exe已然拥有良好的用户界面,为什么不直接是用?
    你做的软件和这个test.exe是什么关系?所有的输入输出都要拦截,做一个win的外壳?你管道尝试过,没成功的原因是?卡在哪里了?
      

  13.   

    这个用命名管道也能解决的很好,不过我没有具体的应用过,所以无法给出更好的建议,当初我做那个项目的时候在Remoting和管道之间斟酌了半天,最后决定用的remoting。
    你用的C++,不是在VS.NET的环境下吗?如果是的话也一样可以用remoting的
      

  14.   

    参考这个,用汇编写的,利用“匿名管道”http://www.moon-soft.com/doc/45381.htm我了后修改了程序,发现当控制台程序执行到getchar()等待输入时候,ReadFile()异常退出,因为没有读到数据。导致最外层while中断,不应该啊!~~~?~~~~char szBuf1[4096];
    memset(szBuf1,0,4096);
    DWORD dwCount=0;
    while(IsWork)
    {
    dwCount=0;
    WriteFile(hWrite_in,pCmd->in,sizeof(pCmd->in),&dwCount,NULL);
    while(1)
    {
    dwCount=0;
    //while(dwCount==0)
    //{
    // PeekNamedPipe(hRead_out,szBuf1,4095,&dwCount,NULL,NULL);
    //}
    if(!ReadFile(hRead_out,pCmd->out,pCmd->sizeOut-1,&dwCount,NULL))//这里当getchar()时候无声息退出,导致整个while(IsWork)中断
    break;
    pCmd->out[dwCount-1]=0;
    }
    Sleep(200);
    }
      

  15.   

    我曾经做过类似的案例,大致是winform中获得控制台的输入再做处理,楼主是要把winform的数据再传送给控制台?
      

  16.   


    我再C++中用匿名管道可以将控制台输出到文本框中,
    现在是想在控制台程序程序执行过程中
    当控制台程序中出现getchar()  scanf()等要求用户手动输入的时候,
    将文本框中的内容输入到控制台中。
      

  17.   

    Win32有一些COnsole的API,楼主是不是把这些都排除在外了?
      

  18.   

    这些个API这是调用了控制台界面进行了输入和输出,并不能把另外一个控制台程序的输入和输出拦截下来
      

  19.   

    你是要和exe交互,不仅要输出而且还要输入。
    只求输出可以用process
    期待答案。
      

  20.   

    当控制台等待用户输入时候,比如getchar() scanf等,匿名管道ReadFile会由于没有接受导数据而悄无声息的退出,没有异常,也没有返回值,甚至连GetLastError()都无法捕获到。
      

  21.   

    已经解决了。完全接管了控制台的输入和输出。无论cmd还是自己写的控制台程序@!~~~~结贴了
      

  22.   

    可以设置CUI程序的stdin,stdout,stderr三个值啊,分别使用三个(也可以将stdout与stderr合并使用一个管道)不同的输入/输出管道来做,应该可以的。