【300分】Form窗体和console控制台交互问题

mngzilin 2010-08-11 08:34:02
问题:

现有一Form窗体程序(开发语言c、c++、c#不限),欲调用控制台程序test.exe

现可以调用API函数利用“管道”获取到输出内容。但是如何能够较灵活的控制test.exe 的输入呢?

因为test.exe需要人为输入控制内容,比如输入“esc”退出等。

msdn上面的“管道”例子尝试了没有成功,正郁闷中....



下面方法除外

1.调用批处理
2.将控制台嵌入到Form中
3.在硬盘或其他存储介质中创建临时文件进行数据交流
4.在Form中创建控制台,只ConsoleRead\ConsoleWrite等.....


最先给出最可行的解决方案者,得分100分
方案可行者,前两名,每人50分
其余酌情分散100分
...全文
1206 68 打赏 收藏 转发到动态 举报
写回复
用AI写文章
68 条回复
切换为时间正序
请发表友善的回复…
发表回复
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 64 楼 lisunlin0 的回复:]
可以设置CUI程序的stdin,stdout,stderr三个值啊,分别使用三个(也可以将stdout与stderr合并使用一个管道)不同的输入/输出管道来做,应该可以的。
[/Quote]

你应该看27楼的控制台程序代码
ajq1989 2010-08-12
  • 打赏
  • 举报
回复
sunlin7 2010-08-12
  • 打赏
  • 举报
回复
可以设置CUI程序的stdin,stdout,stderr三个值啊,分别使用三个(也可以将stdout与stderr合并使用一个管道)不同的输入/输出管道来做,应该可以的。
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
已经解决了。完全接管了控制台的输入和输出。无论cmd还是自己写的控制台程序@!~~~~结贴了
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
提前解决,提前结贴。
龍月 2010-08-11
  • 打赏
  • 举报
回复
mark 帮顶了
Alfredknox 2010-08-11
  • 打赏
  • 举报
回复
这个有点郁闷。。
Alfredknox 2010-08-11
  • 打赏
  • 举报
回复
学习。。。
healer_kx 2010-08-11
  • 打赏
  • 举报
回复
Win32有一些COnsole的API,楼主是不是把这些都排除在外了?
dodducs 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 mngzilin 的回复:]

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


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

嗯,,给个建议,,这段话如果拿到主楼上的话 问题解决的速度可能会快一点,,
这个解释的比较清楚些,,,继续等大牛出现
justfortemp 2010-08-11
  • 打赏
  • 举报
回复
批处理为什么不行

控制台程序需要获取数据的时间是不固定的?
tobypy 2010-08-11
  • 打赏
  • 举报
回复
mark 帮顶
mngzilin 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 amandag 的回复:]
我曾经做过类似的案例,大致是winform中获得控制台的输入再做处理,楼主是要把winform的数据再传送给控制台?
[/Quote]

我再C++中用匿名管道可以将控制台输出到文本框中,
现在是想在控制台程序程序执行过程中
当控制台程序中出现getchar() scanf()等要求用户手动输入的时候,
将文本框中的内容输入到控制台中。
amandag 2010-08-11
  • 打赏
  • 举报
回复
我曾经做过类似的案例,大致是winform中获得控制台的输入再做处理,楼主是要把winform的数据再传送给控制台?
mngzilin 2010-08-11
  • 打赏
  • 举报
回复
实在是困了,先睡会儿去。如果有结果一定分享啊~~
mngzilin 2010-08-11
  • 打赏
  • 举报
回复

35楼,这个用汇编写的同样有这个问题,哪个用了批处理。郁闷中!~~~
mngzilin 2010-08-11
  • 打赏
  • 举报
回复
参考这个,用汇编写的,利用“匿名管道”

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);
}
xzjxylophone 2010-08-11
  • 打赏
  • 举报
回复
关注 帮顶。 我第一个想到的就是 批处理, 结果。。。。。
bloodish 2010-08-11
  • 打赏
  • 举报
回复
控制台程序已经写死了,这个限制把很多方法都堵死了,关注!
danruojun 2010-08-11
  • 打赏
  • 举报
回复
这个用命名管道也能解决的很好,不过我没有具体的应用过,所以无法给出更好的建议,当初我做那个项目的时候在Remoting和管道之间斟酌了半天,最后决定用的remoting。
你用的C++,不是在VS.NET的环境下吗?如果是的话也一样可以用remoting的
[Quote=引用 28 楼 mngzilin 的回复:]
引用 24 楼 danruojun 的回复:
我有一个类似的项目,form在满足条件的时候启动一个console控制台程序,执行过程中form和console可以实现交互,用的.Net Remoting技术,实现的很好,楼主可以参考一下


我现在用C++写的,很想用C#,但是不能。期待//.....

最好能用“匿名管道”或者“命名管道”之类的解决
[/Quote]
加载更多回复(38)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧