多进程实现DOS重定向输出,界面如下:

主要的代码实现如下:

 #define MAXREADBUFFERLEN (60 * 1000)

 void CRedirectDlg::OnBnClickedButtonRun()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strCommand, strFileName(_T("Redirect.txt"));
m_strCommand.TrimRight(_T(" "));
if (m_strCommand == _T(""))
{
return;
}
strCommand.Format(_T("cmd.exe /c \"%s\">%s"), m_strCommand, strFileName); //创建一个不要出现DOS窗口的、影藏的命令执行线程
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi;
BOOL res = CreateProcess(NULL, strCommand.GetBuffer(), NULL, NULL, NULL,
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
if (!res)
{
AfxMessageBox(_T("创建线程出错。"));
return;
} //等待进程执行完毕
WaitForSingleObject(pi.hProcess, INFINITE); //如果打开文件失败,则有可能文件仍在使用中,可以多次读取
TCHAR szBuff[MAXREADBUFFERLEN] = { };
BOOL bSuccess = FALSE;
try
{
CFile file;
if (file.Open(strFileName, CFile::modeReadWrite, NULL))
{
file.Read((TCHAR*)szBuff, MAXREADBUFFERLEN);
file.Close();
bSuccess = TRUE;
}
}
catch (CFileException e)
{
Sleep();
} //如果打开文件成功,则删除临时文件,并显示出结果
if (bSuccess)
{
DeleteFile(strFileName);
m_strResult.Format(_T("%s"), (TCHAR*)szBuff);
}
else
{
AfxMessageBox(_T("程序执行出错。"), MB_ICONERROR | MB_OK);
} UpdateData(FALSE);
}

下载地址:http://pan.baidu.com/s/1eQl6pTC

最新文章

  1. MapReduce 过程分析
  2. oracle--trunc与to_char的区别
  3. 技术:使用Amazon S3接口云存储(Java版)
  4. mysql 索引分类
  5. Oracle rowid
  6. 基于安卓高仿how-old.net实现人脸识别估算年龄与性别
  7. ......那么Win8.1怎么去掉文件夹?
  8. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .
  9. Android 定时器实现的几种方式和removeCallbacks失效问题详解
  10. GridView分页排序
  11. HubbleDotNet 学习之路
  12. C# 枚举
  13. Android中使用HttpGet和HttpPost访问HTTP资源
  14. 【转】Android源码下载过程的一些注意事项
  15. 通过改变viewport 实现网站自适应
  16. Python OJ 从入门到入门基础练习 10 题
  17. spring boot到底帮我们做了那些事?
  18. Solidity高级理论(二):Gas
  19. pg安装入门
  20. 使用C#爬小说

热门文章

  1. 美国是一个"愚蠢而落后的国度"--大家千万别去
  2. 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统
  3. Entity Framework知识小总结
  4. 自己动手编写一个VS插件(六)
  5. C# 与.NET2.0 中类型Type的GetMethod方法
  6. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)
  7. 我的Spring之旅(二):为请求加入參数
  8. Matlab Tricks(十九)—— 序列左右移的实现
  9. Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)
  10. EasyUI-DataGrid多线动态实现选择性合并