使用CreatePipe遇到的问题?
本帖最后由 VisualEleven 于 2013-08-29 13:33:10 编辑 我是想把控制台程序的文字输出到一个文本框中,在命令行中执行"Fc.exe /?" 或 "Tdump.exe"(BCB60中的一个工具)时输出不正常,但这两个程序在VC6 IDE的工具菜单下面配置工具,都能正常输出,下面是代码:
-----------------------------------
HANDLE hStdOutRd, hStdOutWr;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hStdOutRd, &hStdOutWr, &sa, 0))
return;
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hStdOutWr;
si.hStdError = hStdOutWr;
BOOL bRet = CreateProcess(NULL, "Fc.exe /?", NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
if (!bRet)
{
CloseHandle(hStdOutWr);
CloseHandle(hStdOutRd);
return;
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
CloseHandle(hStdOutWr);
TCHAR szBuf[4096];
DWORD dwReadBytes;
while (ReadFile(hStdOutRd, szBuf, 4095, &dwReadBytes, NULL))
{
szBuf[dwReadBytes] = '\0';
m_ctlEdit.SelSel(-1, -1);
m_ctlEdit.ReplaceSel(szBuf);
}
CloseHandle(hStdOutRd);
[解决办法]
好像没问题。。。把CreateProcess第一个参数改成控制台程序绝对路径试试。第二个放参数、、、
[解决办法]
学习中。。。顶下。。。
感觉应该跟参数有关系
[解决办法]
要使用cmd来完成
如下命令,将内容输出到 e:\b.txt文件中
cmd.exe /c fc.exe /? > "e:\b.txt"
调用:
CString cstrSaveFilePath("e:\b.txt");//<---设置保存内容的文件全路径
ShellExecute(NULL, _T("open"), _T("cmd.exe"), _T("/C Fc.exe /? > "") + cstrSaveFilePath+ _T("""), NULL, SW_HIDE);