现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

c++获取控制台输出

2014-03-13 05:55 工业·编程 ⁄ 共 1313字 ⁄ 字号 暂无评论
文章目录

// 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;
}

相关阅读

----VC获取启动程序的输出

给我留言

留言无头像?