C++的mfc创建管道
注意:下面的东西是单管道
//创建管道
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创建管道的更多相关文章
- 转:MFC创建多线程实例
作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去 ...
- 使用MFC创建C++程序
编译环境:VS2017 MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. ...
- MFC创建线程示例
MFC创建线程示例 AfxBeginThread() 创建现场的方法是AfxBeginThread()函数. 在[.CPP]文件定义一个全局变量,决定什么时候退出这个线程. BOOL g_bWillE ...
- 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS
如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...
- 利用MFC创建窗口、消息映射、window中的字节
利用MFC创建窗口: 1.mfc的头文件:afxwin.h 2.自定义类,继承于CWinApp,应用程序类(app应用程序对象,有且仅有一个) 3.程序入口:Initinstance 4.在程序入口中 ...
- 【VS开发】使用MFC创建并调用ActiveX控件
使用MFC创建并调用ActiveX控件 今天做了一下ActiveX的使用测试,总结一下: 首先使用MFC创建一个activeX的控件譬如ActiveXTest,编译成ocx并注册,然后另外编写一个测试 ...
- MFC创建动态链接库DLL并调用方法详解
实例一: 1.创建一个动态链接库工程,如login_dll. 2.在原工程头文件或者新建头文件如showdlg.h定义动态链接库的导出函数,代码如下: #include "stdafx.h& ...
- MFC 创建UI线程
对于windows来说,所有的线程都是一样的,但MFC却把线程区分为两种:用户界面(UI)线程和工作者线程.用户界面线程具有消息循环而工作者线程没有.UI线程可以创建窗口并给这些窗口发送消息,工作者线 ...
- MFC 创建新项目
本文主要介绍如何是使用vc++创建MFC项目,并简单介绍整个项目的基本框架.文件–>新建,会弹出以下新建文件(项目)类型的界面,如下 按上图的步骤u,创建一个MFC工程.其中步骤3中的CardD ...
- 学习:简单使用MFC创建对话框窗口
MFC介绍:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows ...
随机推荐
- React Navite环境搭建
俗话说"工欲善其事,必先利其器."所以,我们第一步就是搭建React Native开发坏境. 一.安装Node.js.npm.yarn 1.1 React native需要借助no ...
- monkey自动化脚本
获取第三方安装包:手机需root,adb shell>cd data/app>ls(获取相应app信息)>cd +相应app信息>base.apk(安装包) 获取第三方安装包: ...
- css - content-visibility
css - content-visibility content-visibility:实现可见网页只加载可见区域内容 介绍 content-visibility是一个css属性,它控制一个元素是否呈 ...
- unittestreport生成报告介绍
unittestreport主要有以下几个作用 接口用例HTML 测试报告生成. 测试用例失败重运行. 发送测试结果及报告到邮箱. 发送报告到钉钉群. 安装unittestreport: pip3 ...
- mysql 备份定时任务
#!/bin/bash rq=`date +%Y-%m-%d-%H` #日期 #数据库信息 host=127.0.0.1 user=root password=xxx dbname=script #放 ...
- Java Development Kit下载地址
Java Development Kit下载地址 官网下载 一般最新版本无需登录即可下载,其他历史版本需要登录Oracle账户才可以下载. 最新版下载地址: https://www.oracle.co ...
- 超级详细的Vue安装与配置教程
原文: https://www.jb51.net/article/251371.htm 超级详细的Vue安装与配置教程 Vue web前端三大主流框架之一,是一套用于构建用户界面的渐进式框架,下面 ...
- DOM状态监听(观察者模式)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- SSLCipherCheck_v1.4.2
Usage: sslciphercheck.exe -h <Host> -p <Port> -u <URL> -c <CSV File> -i < ...
- antd 动态添加表格列 表格不更新
原因:react 对比columns 数组为原数组,内存地址没变: 解决办法:用es6的扩展,生成新数组,添加操作列operateCol setTableColumns([...tableColums ...