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

//创建管道
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. JRebel for IDEA插件 激活

    JRebel for IDEA 插件的License Server 程序,在IDEA中下载JREBEL的插件后,通过配置此服务进行插件激活. 使用方法:通过java -jar JrebelBrains ...

  2. 【力扣】:N字型

    1 class Solution { 2 public String convert(String s, int numRows) { 3 String resultS = ""; ...

  3. 前端下载csv文件

    var str = [ 'ssssssssssssssssssssssssssssssssssssssss' ]; var uri = 'data:text/csv;charset=utf-8,%EF ...

  4. Spark应用程序第三方jar文件依赖解决方案

    第一种方式 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式 操作:使用spark-submit提交命令的参数: ...

  5. centos 换源

    原文: https://blog.csdn.net/MateSnake/article/details/124088310 备份原来的源:sudo mv /etc/yum.repos.d/CentOS ...

  6. nginx重启报错 nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)

    原文: https://blog.csdn.net/CRMEB/article/details/120779362 nginx [error] open() "/usr/local/var/ ...

  7. 4、kubesphere环境安装

    安装步骤 选择4核8G(master).8核16G(node1).8核16G(node2) 三台机器,按量付费进行实验,CentOS7.9 安装Docker 安装Kubernetes 安装KubeSp ...

  8. VS2010查看DLL导出函数的方法

    在window下查看动态库的导出函数可以用vs自带的Dependenc工具:对于VC6.0,VC所带的Depends软件,在VC6安装目录下的tools文件夹里面,可以直接运行. VS2010中没有了 ...

  9. 第九章:用Python处理省份城市编码数据

    文章目录 项目背景 项目代码 新增省份编码 获取编码映射数据 合并数据 统计省份用户数 使用SQL实现 源码地址 本文可以学习到以下内容: 免费获取全国省份.城市编码以及经纬度数 使用 pandas ...

  10. Kubernetes初识

    目录: 云原生 Kubernetes概述 1.K8S是什么 2.为什么要用K8S 3.Kubernetes集群架构与组件 K8S的特性 核心组件 Master组件 配置存储中心 Node组件 Kube ...