还是重定向的问题

happydingdang 2005-05-06 11:04:11
在代码里面需要启动一个命令行小程序来协助完成一个功能,而且这个小程序运行的时候不能闪出窗口,所以用system()加重定向的方法就不用考虑了。
那么估计只能是用CreatProcess或者Winexec这两个方法了,因为可以隐藏小程序执行时的窗口。可是我有需要获得小程序的输出结果。怎么办?

有的朋友告诉我用获取exitcode或者改变输出句柄STARTUPINFO.hStdOutput的方法,这两种方法要怎么实现,关键我是要得到原本在命令行窗口上输出的那些printf字符串。

命令行小程序没有源码。
...全文
100 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericsheng 2005-05-06
  • 打赏
  • 举报
回复
支持楼上,我记得<UNIX网络编程>好象提过这种方法
idAnts 2005-05-06
  • 打赏
  • 举报
回复
管道重定向。下面这段代码是把windows的ping 程序的内容输出到edit里面的。

HANDLE hReadPipe;
HANDLE hWritePipe;
SECURITY_ATTRIBUTES sat;
STARTUPINFO startupinfo;
PROCESS_INFORMATION pinfo;
BYTE buffer[1024];
DWORD byteRead;
CString rString;

UpdateData();
if(m_Host=="")
{
MessageBox("主机地址不能为空!");
return;
}
m_Host="c:\\windows\\ping.exe "+m_Host;

sat.nLength=sizeof(SECURITY_ATTRIBUTES);
sat.bInheritHandle=true;
sat.lpSecurityDescriptor=NULL;
if(!CreatePipe(&hReadPipe,&hWritePipe,&sat,NULL))
{
MessageBox("Create Pipe Error!");
return;
}
startupinfo.cb=sizeof(STARTUPINFO);
GetStartupInfo(&startupinfo);
startupinfo.hStdError=hWritePipe;
startupinfo.hStdOutput=hWritePipe;
startupinfo.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
startupinfo.wShowWindow=SW_HIDE;
if(!CreateProcess(NULL,m_Host.GetBuffer(m_Host.GetLength()+1),NULL, NULL, TRUE, NULL, NULL, NULL,&startupinfo,&pinfo))
{
MessageBox("create process error!");
return;
}
CloseHandle(hWritePipe);
while(true)
{
RtlZeroMemory(buffer,1024);
if(ReadFile(hReadPipe,buffer,1023,&byteRead,NULL)==NULL)
break;
//IDC_EDIT1是那个edit
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,EM_SETSEL,-1,0);
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,EM_REPLACESEL,false,(long)buffer);
}
CloseHandle(hReadPipe);
m_Host.ReleaseBuffer();

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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