注意:下面的东西是单管道

//创建管道
CString CDownDlg::CreateCmd(CString res) {
CString wrCmd;
CString ans = _T("FALL");
TCHAR* szCmdLine = new TCHAR[MAX_PATH * 2];
//= _T("adb\tdevices")
wrCmd = res;
szCmdLine = wrCmd.GetBuffer(wrCmd.GetLength());
wrCmd.ReleaseBuffer(); /*创建管道,单管道*/
HANDLE hWritePipe = nullptr;//写到管句柄中,nullptr可以暂时理解为null
HANDLE hReadPipe = nullptr;
//管道的安全属性
SECURITY_ATTRIBUTES sa = { 0 };
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;//句柄可以被继承
sa.lpSecurityDescriptor = nullptr;//安全描述
//hWritePipe是往管道里面写的数据的句柄
//hReadPipe是读取管道里面返回的数据的句柄
//sa是管道的安全属性
//0,管道的大小,0为默认大小
//创建管道
BOOL bCreatePipe = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
if (FALSE == bCreatePipe) {
//AfxMessageBox(_T("创建管道失败fall"));
return ans;
}
//到此管道创建完毕 //进程信息结构
PROCESS_INFORMATION pi = { 0 };
//启动信息
//STARTUPINFO用于指定新进程的主窗口特性的一个结构
STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO);
//单管道使用标准输入
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
//管道的输出
si.hStdOutput = si.hStdError = hWritePipe;
si.wShowWindow = SW_HIDE;//隐藏进程窗口
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //获取命令
//GetDlgItemText(IDC_EDIT1, szCmdLine, MAX_PATH * 2);//获取mfc中窗口的文字,获取IDC_EDIT1中的文字
//把idc里面的命令放到szCmdLine中 //创建进程
BOOL bCreateProc = CreateProcess(nullptr, szCmdLine, nullptr, nullptr, TRUE, 0, nullptr, nullptr, &si, &pi);
if (FALSE == bCreateProc)
{
//AfxMessageBox(_T("进程创建失败"));
return ans;
}
//关闭这两个句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
//读取管道中的内容要先关闭另外一端
CloseHandle(hWritePipe);
//创建成功后,把管道的内容读取出来
//注意,只能用ASCII编码格式读,因为命令行窗口的内容都是ASCII编码的
//如果CString TCHAR 来读会乱码
char szBuffer[4096] = { 0 };
while (true)
{
memset(szBuffer, 0, sizeof(szBuffer));
if (FALSE == ReadFile(hReadPipe, szBuffer, sizeof(szBuffer), nullptr, nullptr)) {
break;
}
ans.Empty();
ans += szBuffer;
if (0 == ans.GetLength())
{
ans = _T("return fall");
} } return ans;
}

C++的mfc创建管道的更多相关文章

  1. 转:MFC创建多线程实例

    作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去 ...

  2. 使用MFC创建C++程序

    编译环境:VS2017 MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. ...

  3. MFC创建线程示例

    MFC创建线程示例 AfxBeginThread() 创建现场的方法是AfxBeginThread()函数. 在[.CPP]文件定义一个全局变量,决定什么时候退出这个线程. BOOL g_bWillE ...

  4. 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS

    如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...

  5. 利用MFC创建窗口、消息映射、window中的字节

    利用MFC创建窗口: 1.mfc的头文件:afxwin.h 2.自定义类,继承于CWinApp,应用程序类(app应用程序对象,有且仅有一个) 3.程序入口:Initinstance 4.在程序入口中 ...

  6. 【VS开发】使用MFC创建并调用ActiveX控件

    使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...

  7. MFC创建动态链接库DLL并调用方法详解

    实例一: 1.创建一个动态链接库工程,如login_dll. 2.在原工程头文件或者新建头文件如showdlg.h定义动态链接库的导出函数,代码如下: #include "stdafx.h& ...

  8. MFC 创建UI线程

    对于windows来说,所有的线程都是一样的,但MFC却把线程区分为两种:用户界面(UI)线程和工作者线程.用户界面线程具有消息循环而工作者线程没有.UI线程可以创建窗口并给这些窗口发送消息,工作者线 ...

  9. MFC 创建新项目

    本文主要介绍如何是使用vc++创建MFC项目,并简单介绍整个项目的基本框架.文件–>新建,会弹出以下新建文件(项目)类型的界面,如下 按上图的步骤u,创建一个MFC工程.其中步骤3中的CardD ...

  10. 学习:简单使用MFC创建对话框窗口

    MFC介绍:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows ...

随机推荐

  1. React Navite环境搭建

    俗话说"工欲善其事,必先利其器."所以,我们第一步就是搭建React Native开发坏境. 一.安装Node.js.npm.yarn 1.1 React native需要借助no ...

  2. monkey自动化脚本

    获取第三方安装包:手机需root,adb shell>cd data/app>ls(获取相应app信息)>cd +相应app信息>base.apk(安装包) 获取第三方安装包: ...

  3. css - content-visibility

    css - content-visibility content-visibility:实现可见网页只加载可见区域内容 介绍 content-visibility是一个css属性,它控制一个元素是否呈 ...

  4. unittestreport生成报告介绍

    ​ unittestreport主要有以下几个作用 接口用例HTML 测试报告生成. 测试用例失败重运行. 发送测试结果及报告到邮箱. 发送报告到钉钉群. 安装unittestreport: pip3 ...

  5. mysql 备份定时任务

    #!/bin/bash rq=`date +%Y-%m-%d-%H` #日期 #数据库信息 host=127.0.0.1 user=root password=xxx dbname=script #放 ...

  6. Java Development Kit下载地址

    Java Development Kit下载地址 官网下载 一般最新版本无需登录即可下载,其他历史版本需要登录Oracle账户才可以下载. 最新版下载地址: https://www.oracle.co ...

  7. 超级详细的Vue安装与配置教程

    原文: https://www.jb51.net/article/251371.htm 超级详细的Vue安装与配置教程   Vue web前端三大主流框架之一,是一套用于构建用户界面的渐进式框架,下面 ...

  8. DOM状态监听(观察者模式)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. SSLCipherCheck_v1.4.2

    Usage: sslciphercheck.exe -h <Host> -p <Port> -u <URL> -c <CSV File> -i < ...

  10. antd 动态添加表格列 表格不更新

    原因:react 对比columns 数组为原数组,内存地址没变: 解决办法:用es6的扩展,生成新数组,添加操作列operateCol setTableColumns([...tableColums ...