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 ...
随机推荐
- Parsing error: missing-whitespace-between-attributes
给如下位置添加空格即可 在文件末尾添加一空白行即可
- # huawei--流策略+NAT+单臂路由
huawei--流策略+NAT+单臂路由 项目要求: 公司内部有两个网段,分别为192.168.1.0/24和192.168.2.0/24,使用路由器R1实现单臂路由,并配置流策略,使192.168. ...
- RabbitMQ的使用介绍
一.RabbitMQ是什么 RabbitMQ是一种常用的消息中间件,是基于AMQP协议,采用erlang语言开发的面向消息服务的中间件,是一个独立的系统应用程序,可以管理服务器计算资源和网络通信.一般 ...
- MobaXterm汉化版教程
MobaXterm中文版是一款非常好用的远程连接.远程控制软件,它堪称全能终端神器,支持非常多的远程协议 ,如SSH,Telnet,Rsh,Xdmc,RDP,VNC,FTP,SFTP,串口(Seria ...
- 【实验】VUE依赖版本,遇到就看这里
https://www.cnblogs.com/luomanman/p/15435422.html
- 使用Promethues和Grafana监控Flink
之前使用Influxdb储存Metrics经常会出现数据写不进去的问题,当Influxdb重启之后又能写进去,遂将数据存储部分换成Promethues,因为Flink采用PutGateway的方式,需 ...
- KETTLE 首次连DB2报错,无驱动。
DB2 把相应数据库的jar包放入 data-integration\lib 或者data-integration\libswt\win64 重启kettle程序 连接成功 驱动包,我是用的aqua工 ...
- 小白之Python-基础中的基础02
Python-基础中的基础02 继续整理笔记,反复练习!fighting! -----------------华丽的分界线-------------变量:第一次出现叫做定义变量,再次出现为为该变量赋值 ...
- Chrome浏览器提示您的连接不是私密连接解决办法
解决方案: 是在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页. 原因: 因为Chrome不信任这些自签名ssl证书,为了安全起见,直接 ...
- RDD持久化和检查点
val count: RDD[(String, Int)] = mapRDD.reduceByKey(_ + _)count.collect() val value: RDD[(String, Ite ...