使用CreatePipe遇到的问题?

fhw217 2013-08-29 12:43:29
我是想把控制台程序的文字输出到一个文本框中,在命令行中执行"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);
...全文
364 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhw217 2013-09-09
  • 打赏
  • 举报
回复
HANDLE hNulFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); si.hStdInput = hNulFile;
fhw217 2013-09-09
  • 打赏
  • 举报
回复
HANDLE hNulFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); si.hStdInput = hNulFile;
fhw217 2013-09-09
  • 打赏
  • 举报
回复
解决了,要设置输入管道。 HANDLE hNulFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); si.hStdInput = hNulFile;
Eleven 2013-08-30
  • 打赏
  • 举报
回复
CreateProcess函数的第二个参数在PC平台是LPTSTR,不是LPCTSTR,,WinCE平台下才是LPCTSTR
homesos 2013-08-30
  • 打赏
  • 举报
回复
使用CreateProcess时类似,运行的cmd.exe,参数传在控制台里输入的内容,注意路径要用""包起来
homesos 2013-08-30
  • 打赏
  • 举报
回复
要使用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);
Love_云 2013-08-29
  • 打赏
  • 举报
回复
学习中。。。顶下。。。 感觉应该跟参数有关系
woshisange03 2013-08-29
  • 打赏
  • 举报
回复
好像没问题。。。把CreateProcess第一个参数改成控制台程序绝对路径试试。第二个放参数、、、

15,471

社区成员

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

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