MFC-单管道
来源:互联网 发布:php enchant 编辑:程序博客网 时间:2024/05/12 13:50
单管道通信,每传输一次数据就要创建一个新的进程,速度很慢,但是简单.
下面做一个读取命令行内容的例子
效果如图:
全部的代码都写到执行按钮中,代码如下
HANDLE hWritePipe = nullptr;//把内容写到管道的句柄 HANDLE hReadPipe = nullptr;//从管道里读取内容的句柄 //管道的安全属性 SECURITY_ATTRIBUTES sa = { 0 }; sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE;//句柄可继承 sa.lpSecurityDescriptor = nullptr;//安全描述,设为null //创建管道 BOOL bCreatePipe = CreatePipe( &hReadPipe, //把内容写到管道的句柄 &hWritePipe,//从管道里读取内容的句柄 &sa, //管道安全属性 0 //管道大小,0表示默认大小 ); if (!bCreatePipe) { AfxMessageBox(TEXT("创建管道失败!")); return; } //进程信息结构 PROCESS_INFORMATION pi = { 0 }; //启动信息 STARTUPINFO si = { 0 }; si.cb = sizeof(STARTUPINFO); //因为是但管道,所以命令行的输入是标准输入 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); //命令框的输出接到管道的hWrite,这样就能直接把内容输出到管道中 si.hStdOutput = si.hStdError = hWritePipe; si.wShowWindow = SW_HIDE;//隐藏进程窗口 si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //获取命令 TCHAR szCmdLine[MAX_PATH * 2] = {0}; GetDlgItemText(IDC_EDIT_CMD, szCmdLine, MAX_PATH * 2); //创建进程 BOOL bCreateProc = CreateProcess(nullptr, szCmdLine, nullptr, nullptr, TRUE, 0, nullptr, nullptr, &si, &pi); if (!bCreateProc) { AfxMessageBox(TEXT("创建进程失败!")); return; } else { //不需要这两个句柄,关掉他们 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); //读取管道内容时要先关闭管道的另一端 CloseHandle(hWritePipe); //创建成功后,把管道的内容读取出来 //注意,只能用ASCII编码格式读,因为命令行窗口的内容都是ASCII编码的 //如果CString TCHAR 来读会乱码 char szBuffer[4096] = { 0 }; while (true) { memset(szBuffer, 0, sizeof(szBuffer)); //如果管道里没内容就会读不到返回FALSE if (!ReadFile(hReadPipe,szBuffer,sizeof(szBuffer),nullptr,nullptr)) break; m_content += szBuffer; } //显示内容 UpdateData(FALSE); CloseHandle(hReadPipe); }
然后输入命令,点击执行即可读取内容显示出来.
如果命令是执行exe文件,则编辑框中无内容显示
0 0
- MFC-单管道
- MFC 匿名管道实现输出
- MFC单选按钮
- mfc 单文档 退出
- MFC单文档结构
- MFC单实例
- MFC单文档全屏
- MFC单选按钮
- MFC单文档SDI
- MFC RadioListBox 单选
- MFC使用管道调用成熟工具
- windows应用程序单实例之命名管道
- MFC单文档视图穷追猛打
- MFC单文档视图穷追猛打
- MFC单文档视图穷追猛打
- MFC单文档视图切换
- MFC单文档打开文件
- MFC 单文档 显示图片
- iOS端应用统计SDK开发简介
- CyclicBarrier介绍
- 【加密解密二】dos命令生成cer文件\P12文件
- UIRichLabel
- 记录是为了更明白地前进
- MFC-单管道
- 最大权闭合子图
- linux环境下Jboss程序部署
- 51nod1686 第K大区间
- (4.6.2)数据库性能优化
- hdu5642 King's Order(数位dp)
- TCP协议三次握手与四次挥手详解
- java collection接口笔记
- HDU-5652 India and China Origins(并查集)