如果在MFC中启动一个DOS程序,并且控制这个DOS程序的输入输出

rurality 2009-07-16 07:34:12
我打算用一个MFC的控制窗口,控制一个基于DOS的应用程序,但是不知道怎么能够将DOS的应用程序,全部输出到MFC程序。
并且可以接受MFC的一些命令

非常感谢
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rurality 2009-07-17
  • 打赏
  • 举报
回复
非常感谢,结贴送分
sunlin7 2009-07-17
  • 打赏
  • 举报
回复
重定向
ZOthello 2009-07-16
  • 打赏
  • 举报
回复
定义两个管道 来重定向cmd的输入和输出。
HANDLE hReadPipe,hWritePipe;
CString cmd="command";
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;

LPSECURITY_ATTRIBUTES lpsa = NULL;

InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd,TRUE,NULL,TRUE);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=&sd;
lpsa = &sa;
cmd="cmd";

sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=TRUE;

if(!CreatePipe(&hReadPipe,&hWritePipe,&sa,0))
return FALSE;

STARTUPINFO si;
PROCESS_INFORMATION ProcInfo;
ZeroMemory(&si,sizeof(si));
si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.hStdInput=hReadPipe;
si.hStdOutput=si.hStdError=hWritePipe;

char* windir=getenv("windir");
if(!CreateProcess(NULL,cmd.LockBuffer(),NULL,NULL,1,CREATE_NEW_CONSOLE,NULL,
windir,&si,&ProcInfo))
return FALSE;
WaitForSingleObject(ProcInfo.hProcess,3000);

CString str;
assert(hReadPipe);
DWORD BytesRead;
char dest[100];
bool RdLoopDone = false;
while (!RdLoopDone) {
static int a=0;
memset(dest, 0, 100);
assert(ReadFile(hReadPipe, &dest, sizeof(dest), &BytesRead, NULL));
str+=dest;
if (BytesRead < 100) RdLoopDone = true;
if (a > 20) RdLoopDone = true;
a++;//this while loop seems infinit if without any control.
}
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
CloseHandle(ProcInfo.hProcess);
AfxMessageBox(str);//a big messagebox with long text appear!!
return TRUE;
Quers 2009-07-16
  • 打赏
  • 举报
回复
输入输出重定向
http://www.sqqt.cn/article.asp?id=6488 这里有个例子可以看看怎样重定向

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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