问题:现有一Form窗体程序(开发语言c、c++、c#不限),欲调用控制台程序test.exe 现可以调用API函数利用“管道”获取到输出内容。但是如何能够较灵活的控制test.exe 的输入呢?因为test.exe需要人为输入控制内容,比如输入“esc”退出等。msdn上面的“管道”例子尝试了没有成功,正郁闷中....下面方法除外:1.调用批处理
2.将控制台嵌入到Form中
3.在硬盘或其他存储介质中创建临时文件进行数据交流
4.在Form中创建控制台,只ConsoleRead\ConsoleWrite等.....
最先给出最可行的解决方案者,得分100分
方案可行者,前两名,每人50分
其余酌情分散100分
2.将控制台嵌入到Form中
3.在硬盘或其他存储介质中创建临时文件进行数据交流
4.在Form中创建控制台,只ConsoleRead\ConsoleWrite等.....
最先给出最可行的解决方案者,得分100分
方案可行者,前两名,每人50分
其余酌情分散100分
控制台是别人写的,我动不了。只能原封不动的用文本框CEdit、TextBox、RichTexxtBox实现输入和输出
msdn的例子里是读取文件的内容互相发送,再发送别的东西肯定可以。LZ说的没有成功,应该是代码写的有问题。
Process.StandardInput
其实也就类似用Socket模拟Ftp
然后通过 Process 传给cmd 然后再把参数放到控制台调用 test.exe
输入的数据在你的程序里的 TextBox 输入 你通过他输入的东西 用 Process传给cmd
这样的话 你中间可以截取他输入的东西,,比如你不想让他输入 esc 这个是退出
那你中间判断下 如果是esc关闭某程序 或者怎么样的只是一点点构思,,不知道对不对
如果控制台式如下的内容呢?char c;
while(c=getchar())
{
if(c=='a')
printf("这是a\n");
else
printf("不是a\n");
}
你做的软件和这个test.exe是什么关系?所有的输入输出都要拦截,做一个win的外壳?你管道尝试过,没成功的原因是?卡在哪里了?
你用的C++,不是在VS.NET的环境下吗?如果是的话也一样可以用remoting的
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);
}
我再C++中用匿名管道可以将控制台输出到文本框中,
现在是想在控制台程序程序执行过程中,
当控制台程序中出现getchar() scanf()等要求用户手动输入的时候,
将文本框中的内容输入到控制台中。
只求输出可以用process
期待答案。