匿名管道实现获取控制台程序输出
本代码经过严格单元测试,如果谁能其中检测到代码bug,我请他一杯最好喝的咖啡!☕️
#define EXECDOSCMD "dir c:" //可以换成你的命令 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <time.h> #include <memory.h> #include <stdlib.h> #include <string.h> #include <process.h> #include <string> #include <windows.h>int main() {HANDLE hRead, hWrite;SECURITY_ATTRIBUTES securityAttr;securityAttr.nLength = sizeof(SECURITY_ATTRIBUTES);securityAttr.lpSecurityDescriptor = NULL;securityAttr.bInheritHandle = TRUE;if (CreatePipe(&hRead, &hWrite, &securityAttr, 0) == 0) {printf("ERROR!! CreatePipe()=[0]. GetLastError()=[%d].\n", GetLastError());return FALSE;}STARTUPINFO startupInfo;PROCESS_INFORMATION processInfo;DWORD dwRetVal = 0;startupInfo.cb = sizeof(STARTUPINFO);GetStartupInfo(&startupInfo);startupInfo.hStdError = hWrite; //把创建进程的标准错误输出重定向到管道输入 startupInfo.hStdOutput = hWrite; //把创建进程的标准输出重定向到管道输入 startupInfo.wShowWindow = SW_HIDE;startupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;char szCmdLine[1024];sprintf(szCmdLine, "cmd.exe /C %s", EXECDOSCMD);if (CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, NULL, NULL, NULL, &startupInfo, &processInfo) == 0) {printf("ERROR!! CreateProcess()=[0]. GetLastError()=[%d].\n", GetLastError());CloseHandle(hWrite);CloseHandle(hRead);return FALSE;}else {WaitForSingleObject(processInfo.hProcess, INFINITE);if (GetExitCodeProcess(processInfo.hProcess, &dwRetVal) == 0) {printf("ERROR!! GetExitCodeProcess()=[0]. GetLastError()=[%d].\n", GetLastError());}else {printf("The command runs successfully with returns code: [%d].\n", dwRetVal);}}CloseHandle(processInfo.hThread);CloseHandle(processInfo.hProcess);CloseHandle(hWrite);char szOutputBuffer[4096]; DWORD dwBytesRead;while (true) {memset(szOutputBuffer, 0x00, sizeof(szOutputBuffer));if (ReadFile(hRead, szOutputBuffer, 4095, &dwBytesRead, NULL) == FALSE)break;printf("result = [%s]\n", szOutputBuffer);}CloseHandle(hRead);return TRUE; }
转载于:https://www.cnblogs.com/moiez/p/6000049.html
匿名管道实现获取控制台程序输出相关推荐
- Createprocess控制台程序输出重定向
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Win ...
- Visual Studio控制台程序输出窗口一闪而过的解决方法
Visual Studio控制台程序输出窗口一闪而过的解决方法 参考文章: (1)Visual Studio控制台程序输出窗口一闪而过的解决方法 (2)https://www.cnblogs.com/ ...
- Win10中控制台程序输出阻塞导致程序卡死
问题描述: 在win10下运行cmd程序,发现程序回卡死,卡死的时候发现对cmd窗口回车会叫醒 问题原因: 是因为在Win10程序运行的过程中,无意用鼠标左键点击来了控制台,则控制台进入"快 ...
- 获取控制台程序的返回值
在控制台程序的函数中使用ExitProcess函数,退出函数,调用者接收返回值: DWORD nResult;SHELLEXECUTEINFO ShExeInfo = { 0 };ShExeInfo. ...
- C#控制台程序输出杨辉三角
Console.WriteLine("请输入杨辉三角的n值:");int n=int.Parse(Console.ReadLine());int[,] arr1 = new int ...
- cmd管道无法接收特定程序返回值_渗透不会反弹shell?来教你写一个cmd的shell
渗透不会反弹shell?来教你写一个cmd的shell 包含的库: #include #include #include #include #include #pragma comment(lib, ...
- 进程间通信 - 匿名管道实现
引子 前面的两篇博文分别介绍了通过剪贴板和通过邮槽来实现进程之间的通信, 其中剪贴板呢,是用来实现本地两个进程之间的通信, 而邮槽则既可以实现本地两个进程之间的通信,也可以实现本地进程和服务器进程的通 ...
- C/C++编程 获取调用其他程序的输出、匿名管道读写
用途 调用外部命令来协助完成某些功能 如很多扫描工具实际上是调用nmap来帮助扫描任务的 #include <stdio.h> //#include <string.h> #i ...
- 获取控制台窗口的句柄(HWND)和程序中输出回车键
一.获取窗口句柄基于类名或窗口名称: http://support.microsoft.com/kb/124103/zh-cn Win32 API 提供用于获取与一个控制台应用程序相关联的窗口句柄没有 ...
最新文章
- Python Map 并行
- 21行代码AC——HDU1106 排序
- openwrt信号弱掉线_斐讯 FIR151M 频繁掉线(OpenWRT解决方案)
- java获取jsp对象的属性_java-从jsp el中的对象获取布尔属性
- python模板引擎传迭代器_python之路 模块,序列化,迭代器,生成器
- ~~约数之和(附模板题)
- IT程序员编程工具利器-辅助编程神器
- SQL查询语句的基本使用方法
- aws服务器修改root密码,使用Xshell登录AWS EC2服务器设置root+密码方式登录
- 由一篇作文《一件有意义的事》展开的
- 2020年鼠年春节贺词祝福大全
- 支付宝提现,单笔转账到支付宝账户
- FreeRTOS临界区操作
- html中td是什么模块,html td什么意思
- 服务器抓不到mrcp协议,MRCP协议学习笔记-语音识别资源的概括和全部Methods
- python循环语句if语句的题目_Python if语句 for语句 while循环的练习
- 19年6月英语六级阅读单词
- Springboot旧教材交易系统a6151计算机毕业设计-课程设计-期末作业-毕设程序代做
- 解决c3p0连接池异常问题
- 开源 word 替代_5种Google文档的开源替代品
热门文章
- npm常用命令:init、install、uninstall、help
- Python3字符串填充和对齐代码示例
- 一个栈输入序列为1,2,3,4,5,则下列序列中不可能是栈的输出序列是?
- centos查看端口命令
- python(numpy,pandas2)——numpy 运算
- Navicat Premium 15连接SQL sever (记录一下我的艰难历程,希望对大家有用,摸了半天终于连接上了)
- 网页自动往下走html代码,网页自动跳转代码html
- linux网络相关配置
- Cpp 11 / override 和 final 区别
- TCP/IP / 状态转换图