查看: 3617|回复: 2
收起左侧

[已解决] 请问各位高手,如何保存DOS程序的输出结果?谢谢!

 关闭 [复制链接]
lxblxb
发表于 2009-2-19 09:59:07 | 显示全部楼层 |阅读模式
我有个DOS程序,只能把结果显示在屏幕上,而且中间要输入几个参数。我想用 〉把最终结果存在一个文件中。但问题是程序不会显示中间结果了,所以我不能输入程序要的几个参数。请问各位高手,有什么其他的办法?我上传了关于程序运行情况的附件。谢谢!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
会员价
发表于 2009-2-19 13:03:04 | 显示全部楼层
如果在Win32应用中启动一个控制台应用, 并希望能够获取其输出内容 (如果它向stdout输出的话), 可以使用匿名管道(anonymous pipe) 将其输出重定向。下面做了一个将stdout弄到一个TMemo里的例子,是BCB做的。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//为控制台标准输出创建管道
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES));
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
HANDLE ReadPipeHandle;
HANDLE WritePipeHandle; // 这里没有用到写管道
if(!CreatePipe(&ReadPipeHandle,&WritePipeHandle,&sa,0))
RaiseLastWin32Error();
//创建控制台程序进程
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.hStdOutput=WritePipeHandle;
si.hStdError=WritePipeHandle;
PROCESS_INFORMATION pi;
ZeroMemory(π,sizeof(PROCESS_INFORMATION));
//这里启动console程序
if(!CreateProcess("YourProgram.exe",NULL,NULL,NULL,true,0,NULL,NULL,&si,π))
RaiseLastWin32Error();
//读管道
char Data[1024];
while(true)
{
DWORD BytesRead;
DWORD TotalBytes;
DWORD BytesLeft;
//检查管道数据
if(!PeekNamedPipe(ReadPipeHandle,Data,sizeof(Data),&BytesRead,
&TotalBytes,&BytesLeft))RaiseLastWin32Error();
//有数据的话就读取
if(BytesRead)
{
if(!ReadFile(ReadPipeHandle,Data,sizeof(Data)-1,&BytesRead,NULL))
RaiseLastWin32Error();
Data[BytesRead]='\0';
//写TMemo
Memo1->Lines->Add(AnsiString(Data));
}
else
{
//判断控制台程序是否结束
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)break;
}
ProcessMessages();
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(ReadPipeHandle);
CloseHandle(WritePipeHandle);
}









以上是网上看到的····不知道有没有用··

偶是真的白菜·········
猫的一天
头像被屏蔽
发表于 2009-2-19 14:15:43 | 显示全部楼层
学习一下,虚心求教
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2026-10-22 00:50 , Processed in 0.084074 second(s), 4 queries , Redis On.

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表