使用管道重定向为什么不能得到控制台的输出?
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);
完全照抄网络上面的代码,但是读不到窗口输出信息,谁知道这段代码那里有问题.