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

//创建管道
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;
}

最新文章

  1. 打造android偷懒神器———RecyclerView的万能适配器
  2. nodejs npm常用命令
  3. Callable、Future、RunnableFuture、FutureTask的原理及应用
  4. js事件处理机制
  5. linux下socket编程-进程间通信
  6. 基于nodejs实现js后端化处理
  7. discuz论坛几种安全策略(二)
  8. RStudio版本号管理 整合Git
  9. 201521123119《Java程序设计》第1周学习总结
  10. SSRS报表服务随笔(rdl报表服务)-报表结构与样式
  11. [rhel]安装oracle11g
  12. 浅析java程序的执行过程
  13. 终于有人把“TCC分布式事务”实现原理讲明白了!
  14. EQueue
  15. # Do—Now——团队冲刺博客_总结篇
  16. jQuery之animate中的queue
  17. Win7怎么录制电脑屏幕视频
  18. JavaSE_坚持读源码_ClassLoader对象_Java1.7
  19. .net正则IP加端口,并返回IP加端口
  20. Ionic package Error: Registry returned 404 for GET on

热门文章

  1. [BOM] 封装一下cookie
  2. golang json 字符串 用 json.Number 解析字段
  3. flex_bison
  4. 「SOL」序列计数sequence (模拟赛)
  5. NSFW.js 前端使用教程
  6. Selenium私房菜系列4 -- Selenium IDE的使用【QQ】
  7. 11、java环形单链表解决约瑟夫问题
  8. Spring入门之使用 spring 的 IOC 解决程序耦合(Spring 基于 XML 的 IOC 细节[掌握])(03-02)
  9. 软件工程日报六——TextView和button
  10. python_test_0001_base_string_swap