c++获取控制台输出
来源:互联网 发布:我叫mt配音演员淘宝 编辑:程序博客网 时间:2024/05/17 06:59
// Test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <conio.h>#include <stdio.h>#include <windows.h>#include <fstream>using namespace std;#define EXECDOSCMD "ping www.baidu.com " //可以换成你的命令 BOOL ExecDosCmd() { SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead,&hWrite,&sa,0)) { return FALSE; } STARTUPINFO si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; si.hStdOutput = hWrite; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //关键步骤,CreateProcess函数参数意义请查阅MSDN if (!CreateProcess(NULL, EXECDOSCMD ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { return FALSE; } CloseHandle(hWrite); char buffer[4096] = {0}; DWORD bytesRead; ofstream outfile("log.txt");while (true) { if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) break; //buffer中就是执行的结果,可以保存到文本,也可以直接输出 //printf(buffer); outfile << buffer << endl;Sleep(200); }outfile.close();return TRUE;}int main(){ExecDosCmd();return 0;}