匿名管道读取CMD回显信息
之前用了很坑爹的做法去读取了cmd命令的回显信息,现在发现了用匿名管道的实现方法,由于楼主没有学过Windows核心编程,找了一个代码来凑数
存下来以后研究
- #include <windows.h>
- #include <stdio.h>
- #define EXE_NAME NULL//TEXT("Cmd.exe")
- #define EXE_CMD TEXT("Cmd.exe /C ipconfig/all")
- int main()
- {
- char Buffer[];
- STARTUPINFO sInfo;//新进程的主窗口特性
- PROCESS_INFORMATION pInfo;
- SECURITY_ATTRIBUTES sa;
- HANDLE hRead, hWrite;
- DWORD bytesRead; //读取代码的长度
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);/ /结构体的大小,可用SIZEOF取得
- sa.lpSecurityDescriptor = NULL;//安全描述符
- sa.bInheritHandle = TRUE;;/ /安全描述的对象能否被新创建ÆÆ的进程继承
- if (!CreatePipe(&hRead, &hWrite, &sa, )) //创建匿名管道
- {
- return GetLastError();//返回最近的一个错误,0表示正常
- }
- GetStartupInfo(&sInfo);
- sInfo.cb = sizeof(sInfo);
- sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
- sInfo.wShowWindow = SW_HIDE;
- sInfo.hStdError = hWrite; //将管道的写端交给子进程
- sInfo.hStdOutput = hWrite;
- memset(&pInfo, , sizeof(pInfo));
- if (!CreateProcess(EXE_NAME, EXE_CMD, NULL, NULL, TRUE, , NULL, NULL, &sInfo, &pInfo)) //创建子进程
- {
- CloseHandle(hWrite);
- CloseHandle(hRead);
- return GetLastError();
- }
- CloseHandle(hWrite); //关闭父进程的写端
- for (int i = ;; ++i)
- {
- if (!ReadFile(hRead, Buffer, sizeof(Buffer) - , &bytesRead, NULL)) //读取内容
- {
- break;
- }
- Buffer[bytesRead] = ;
- printf("%s\n", Buffer);
- }
- WaitForSingleObject(pInfo.hProcess, INFINITE);//当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限;
- CloseHandle(hRead);
- system("pause");
- return ;
- }
匿名管道读取CMD回显信息的更多相关文章
- 匿名管道 远程cmd
管道是单向的,传送数据的方向是固定的,所以互相通信需要两个管道. STARTUPINFO si; ZeroMemory(&si,sizeof(si)); si.dwFlags = STARTF ...
- 通过匿名管道获取CMD运行结果
#include <iostream> #include <string> #include <Windows.h> using namespace std; /* ...
- [C++] socket -9[匿名管道]
::怎么弄都不能读取信息....先把代码放着.... #include<windows.h> #include<stdio.h> int main() { HANDLE rea ...
- JFrome 登陆/注册/回显无数据库连接小程序
当离开RCP插件区重新回顾一下JFrame窗口程序的标签.页面间的跳转. 完成一个登陆.注册界面.(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中) 首先向通过JFram ...
- VC 模拟CMD 匿名管道
#include "stdafx.h" #include <Windows.h> #include <stdio.h> #include <stdli ...
- Android 手机卫士--获取联系人信息并显示与回显
前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...
- SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码
问题: 后台在springMVC中使用hibernate-validator做参数校验的时候(validator具体使用方法见GOOGLE),用properties文件配置了校验失败的错误信息.发现回 ...
- C# Process运行cmd命令的异步回显
以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: 以下的代码为new Process() 调用cmd命令,并将结果异步回显到Form的例子: [csharp] ...
- Servlet案例5:用户登录失败信息回显
登录失败信息回显不会的新的一个页面,而是显示在登录页面 一种方法是: 登录页面表单中每个字段后添加<span>标签写入失败信息,利用ajax技术 通过改变<span>标签的di ...
随机推荐
- [整理]PCB阻抗控制
之前一直听说PCB设计中信号完整性及阻抗方面的要求,但是本人对此还是有很多的不了解,每次和别人讨论到这里后就不知道该怎么继续就这个问题交谈下去.正巧最近手头有一点工作有这方面的一些需求,就拿来花了一点 ...
- Elasticsearch refresh vs. flush【转载】
源地址: http://www.jianshu.com/p/0e9f6346f1fe 问: 若一个新的文档索引进ES索引,则它在索引操作执行后约1s可以搜索到.然而我们可以直接调用_flush或 ...
- Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略
1.什么是Semaphore? A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acq ...
- Oracle中的带参数的视图--我们致力于打造人力资源软件
创建包和包体 create or replace package pkg_pv is procedure set_pv(pv varchar2); function get_pv return var ...
- HDU 1165 Eddy's research II (找规律)
题意:给定一个表达式,然后让你求表达式的值. 析:多写几个就会发现规律. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...
- Mat 转 IplImage
Mat 转 IplImage 分类: OpenCV2013-06-02 17:00 1487人阅读 评论(0) 收藏 举报 Mat 转 IplImage Mat image1; IplImage *i ...
- hive数据类型学习
Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括: TINYINT, SMALLINT, INT, BIGINT, BOOLEAN, FLOAT ...
- mysql增加普通用户后无法登陆问题的解决方法
解决方法: 增加普通用户后,执行: mysql> use mysql mysql> delete from user where user=''; mysql> flush priv ...
- PHP--Warning: Invalid argument supplied for foreach() in ...
1.背景 今天学习PHPExcel的使用,在代码执行foreach($data as $value){...}的时候出现这样一个警告提示:Warning: Invalid argument suppl ...
- JQuery学习(表单对象属性)---checked
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...