您的位置:首页 > 编程语言 > C语言/C++

vc++调用exe时,如何获取exe的输出信息

2016-11-28 18:23 1436 查看
最进在写一个程序,需要调用一个第三方的console程序,并获取其处理的结果,调用exe的方法有很多,可是如何调用

了exe然后取到exe的输出信息就是个问题了,试了很多函数,好像都实现不了。

百度了一下,找到篇文章:http://social.microsoft.com/Forums/id-ID/visualcpluszhchs/thread/70fc59b7-6e2d-44e2-9d47-b8c38f49df52

顿时明了了,使用匿名管道把输出重定向就能达到目标了。

下面是查到的一篇介绍如何使用的文章:

VC++在多进程通讯中有一种很好的方法就是使用管道技术。

对于很多的初学者来说,不知道IDE的具体原理是什么,作者也是一样,为此迷惑了很多年,也最近才弄清楚

IDE是如何集成了其他的命令行软件的,比如VC中的cc.exe,cl.exe等Devc++中的gcc,WinTC中集成的tc2.0等。

看起来相当的神秘,其实很简单的。这些IDE就只使用了两种比较核心的技术:一是创建一个进程,比如创建一

个cl.exe的进程;二是利用管道与子进程通信,获取其运行结果,把过程输出和结果输出显示在IDE的输出中!

IDE提供的其他的就是一个代码的编辑环境而已!当然,IDE还做了一件幕后的工作就是根据工程的文件组织生

成了一个MAKEFILE文件。所以,只要你熟悉这两种技术,你也可以编写出一个IDE!

具体我也懒得写了,给段自己的代码出来在这里,自己调试下就知道了。

[cpp] view
plain copy

 print?

CString strCmd = "hello.exe";//cmd命令  

SECURITY_ATTRIBUTES sa;  

HANDLE hRead,hWrite;  

sa.nLength = sizeof(SECURITY_ATTRIBUTES);  

sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符  

sa.bInheritHandle = TRUE; //创建的进程继承句柄  

  

if (!CreatePipe(&hRead,&hWrite,&sa,0)) //创建匿名管道  

{  

    MessageBox("CreatePipe Failed!","提示",MB_OK | MB_ICONWARNING);  

    return;  

}  

  

STARTUPINFO si;  

PROCESS_INFORMATION pi;  

  

ZeroMemory(&si,sizeof(STARTUPINFO));  

  

si.cb = sizeof(STARTUPINFO);  

GetStartupInfo(&si);  

si.hStdError = hWrite;  

si.hStdOutput = hWrite; //新创建进程的标准输出连在写管道一端  

si.wShowWindow = SW_HIDE; //隐藏窗口  

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;  

  

  

char cmdline[200];  

sprintf(cmdline,"%s",strCmd);  

  

if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) //创建子进程  

{  

    MessageBox("CreateProcess Failed!","提示",MB_OK | MB_ICONWARNING);  

    return;  

}  

CloseHandle(hWrite); //关闭管道句柄  

  

char buffer[4096] = {0};  

CString strOutput;  

DWORD bytesRead;  

  

while (true)  

{  

    if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) //读取管道  

    break;  

    strOutput += buffer;  

    UpdateWindow();  

    Sleep(100);  

}  

CloseHandle(hRead);  



这样exe的输出信息都存在了strOutput这个变量里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐