使用管道重定向为什么不能得到控制台的输出?

dongle2001 dongle2001 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
SECURITY_ATTRIBUTES sa,sa2;
HANDLE hInputRead,hInputWrite;
HANDLE hOutputRead,hOutputWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hOutputRead,&hOutputWrite,&sa,0))
{
printf("Error On CreatePipe1");
return 0;
}

sa2.nLength = sizeof(SECURITY_ATTRIBUTES);
sa2.lpSecurityDescriptor = NULL;
sa2.bInheritHandle = TRUE;
if (!CreatePipe(&hInputRead,&hInputWrite,&sa2,0))
{
printf("Error On CreatePipe2");
return 0;
}

STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//使用标准柄和显示窗口
si.hStdError = hOutputWrite;
si.hStdOutput = hOutputWrite;
si.hStdInput = hInputRead;
si.wShowWindow = SW_SHOW;//隐藏控制台窗口
PROCESS_INFORMATION pi= {0};

BOOL fRet = CreateProcess(NULL,
"ping 127.0.0.1",NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
if (!fRet) {
g_bWait = FALSE;
::SendMessage((HWND)lpParam, WM_SETTEXT, 0, (LPARAM)"创建转换进程失败!");
return 0;
}
CloseHandle(hInputRead);
CloseHandle(hOutputWrite);

CString strInfo;
strInfo.Empty();
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if(ReadFile(hOutputRead,buffer,4095,&bytesRead,NULL) == NULL)
{
break;
}
strInfo += buffer;
printf(buffer);// 输出
Sleep(100);
}
CloseHandle(hInputWrite);
CloseHandle(hOutputRead);

::SendMessage((HWND)lpParam, WM_SETTEXT, 0, (LPARAM)strInfo.GetBuffer(0));
WaitForSingleObject(pi.hProcess, INFINITE);
//检查执行结果
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);


完全照抄网络上面的代码,但是读不到窗口输出信息,谁知道这段代码那里有问题.
...全文

相关推荐

匿名管道实现控制台重定向

在本例中,“匿名管道实现控制台重定向”是指将控制台输出(如命令行程序的打印信息)通过匿名管道导向到其他地方,例如另一个进程或文件。

东莞某某某

VC++使用管道重定向进程输入输出(附源码)

VC++常用功能封装代码一系列文章与源码 (欢迎订阅,持续更新...) https://blog.csdn.net/kaizi318/article/details/108846326 源代码demo已上传到百度网盘:永久生效 代码实现了调用控制台程序,并使用管道重定向解析控制台程序输出,实现与控制台程序内部交互! 使用场景:如我们调用ffmpeg.exe进行一些音视频转换工作,(早期以此播放器都这么干), 这样我们不用去编译ffmpeg库,只要知道这个工具怎么使用,然后通过程序调用起来,然...

keivin2006

MFC控制台指令的重定向输出到文件方法

前一篇文章讲过如何隐藏控制台窗口,并把结果返回。但是控制台有个输出重定向输出到文件功能,这个在createprocess中是不支持的。因此那个函数改进如下 TCHAR strLog[1024]={0}; CString strCmp =_T("test.exe   abc>abc.h"); RunCMD(strLog,strCmp.GetBuffer(),TRUE);//这个是用

loseleo

cmd中的重定向输出,管道

### CMD中的重定向输出与管道操作详解在日常的编程工作中,特别是在Windows环境下进行开发时,熟练掌握CMD命令行工具的使用技巧对于提高工作效率是非常有帮助的。

wenwenall

Linux操作之输入输出重定向和管道

- **输出重定向**:例如,使用`>`操作符可以将命令的输出重定向到文件中,覆盖原有文件内容。

wyl636
评论 2
收藏 已收藏
分享
返回顶部
dongle2001
VC/MFC 16,550 成员 421,606 内容