之前用了很坑爹的做法去读取了cmd命令的回显信息,现在发现了用匿名管道的实现方法,由于楼主没有学过Windows核心编程,找了一个代码来凑数

存下来以后研究

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #define EXE_NAME NULL//TEXT("Cmd.exe")
  4. #define EXE_CMD TEXT("Cmd.exe /C ipconfig/all")
  5. int main()
  6. {
  7.  
  8. char Buffer[];
  9. STARTUPINFO sInfo;//新进程的主窗口特性
  10. PROCESS_INFORMATION pInfo;
  11. SECURITY_ATTRIBUTES sa;
  12. HANDLE hRead, hWrite;
  13. DWORD bytesRead; //读取代码的长度
  14. sa.nLength = sizeof(SECURITY_ATTRIBUTES);/ /结构体的大小,可用SIZEOF取得
  15. sa.lpSecurityDescriptor = NULL;//安全描述符
  16. sa.bInheritHandle = TRUE;;/ /安全描述的对象能否被新创建ÆÆ的进程继承
  17.  
  18. if (!CreatePipe(&hRead, &hWrite, &sa, )) //创建匿名管道
  19. {
  20. return GetLastError();//返回最近的一个错误,0表示正常
  21. }
  22.  
  23. GetStartupInfo(&sInfo);
  24. sInfo.cb = sizeof(sInfo);
  25. sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  26. sInfo.wShowWindow = SW_HIDE;
  27. sInfo.hStdError = hWrite; //将管道的写端交给子进程
  28. sInfo.hStdOutput = hWrite;
  29. memset(&pInfo, , sizeof(pInfo));
  30.  
  31. if (!CreateProcess(EXE_NAME, EXE_CMD, NULL, NULL, TRUE, , NULL, NULL, &sInfo, &pInfo)) //创建子进程
  32. {
  33. CloseHandle(hWrite);
  34. CloseHandle(hRead);
  35. return GetLastError();
  36. }
  37. CloseHandle(hWrite); //关闭父进程的写端
  38.  
  39. for (int i = ;; ++i)
  40. {
  41. if (!ReadFile(hRead, Buffer, sizeof(Buffer) - , &bytesRead, NULL)) //读取内容
  42. {
  43. break;
  44. }
  45. Buffer[bytesRead] = ;
  46. printf("%s\n", Buffer);
  47.  
  48. }
  49.  
  50. WaitForSingleObject(pInfo.hProcess, INFINITE);//当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限;
  51. CloseHandle(hRead);
  52. system("pause");
  53. return ;
  54. }

匿名管道读取CMD回显信息的更多相关文章

  1. 匿名管道 远程cmd

    管道是单向的,传送数据的方向是固定的,所以互相通信需要两个管道. STARTUPINFO si; ZeroMemory(&si,sizeof(si)); si.dwFlags = STARTF ...

  2. 通过匿名管道获取CMD运行结果

    #include <iostream> #include <string> #include <Windows.h> using namespace std; /* ...

  3. [C++] socket -9[匿名管道]

    ::怎么弄都不能读取信息....先把代码放着.... #include<windows.h> #include<stdio.h> int main() { HANDLE rea ...

  4. JFrome 登陆/注册/回显无数据库连接小程序

    当离开RCP插件区重新回顾一下JFrame窗口程序的标签.页面间的跳转. 完成一个登陆.注册界面.(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中) 首先向通过JFram ...

  5. VC 模拟CMD 匿名管道

    #include "stdafx.h" #include <Windows.h> #include <stdio.h> #include <stdli ...

  6. Android 手机卫士--获取联系人信息并显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...

  7. SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码

    问题: 后台在springMVC中使用hibernate-validator做参数校验的时候(validator具体使用方法见GOOGLE),用properties文件配置了校验失败的错误信息.发现回 ...

  8. C# Process运行cmd命令的异步回显

    以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: 以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: [csharp] ...

  9. Servlet案例5:用户登录失败信息回显

    登录失败信息回显不会的新的一个页面,而是显示在登录页面 一种方法是: 登录页面表单中每个字段后添加<span>标签写入失败信息,利用ajax技术 通过改变<span>标签的di ...

随机推荐

  1. [整理]PCB阻抗控制

    之前一直听说PCB设计中信号完整性及阻抗方面的要求,但是本人对此还是有很多的不了解,每次和别人讨论到这里后就不知道该怎么继续就这个问题交谈下去.正巧最近手头有一点工作有这方面的一些需求,就拿来花了一点 ...

  2. Elasticsearch refresh vs. flush【转载】

    源地址:    http://www.jianshu.com/p/0e9f6346f1fe 问: 若一个新的文档索引进ES索引,则它在索引操作执行后约1s可以搜索到.然而我们可以直接调用_flush或 ...

  3. Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略

    1.什么是Semaphore? A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acq ...

  4. Oracle中的带参数的视图--我们致力于打造人力资源软件

    创建包和包体 create or replace package pkg_pv is procedure set_pv(pv varchar2); function get_pv return var ...

  5. HDU 1165 Eddy's research II (找规律)

    题意:给定一个表达式,然后让你求表达式的值. 析:多写几个就会发现规律. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...

  6. Mat 转 IplImage

    Mat 转 IplImage 分类: OpenCV2013-06-02 17:00 1487人阅读 评论(0) 收藏 举报 Mat 转 IplImage Mat image1; IplImage *i ...

  7. hive数据类型学习

    Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括: TINYINT, SMALLINT, INT, BIGINT, BOOLEAN, FLOAT ...

  8. mysql增加普通用户后无法登陆问题的解决方法

    解决方法: 增加普通用户后,执行: mysql> use mysql mysql> delete from user where user=''; mysql> flush priv ...

  9. PHP--Warning: Invalid argument supplied for foreach() in ...

    1.背景 今天学习PHPExcel的使用,在代码执行foreach($data as $value){...}的时候出现这样一个警告提示:Warning: Invalid argument suppl ...

  10. JQuery学习(表单对象属性)---checked

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...