| 发表于:2007-01-05 11:27:574楼 得分:15 |
//c++ bool runcmd(string cmd,tstringlist* stringlist) { tmemorystream *memstream=new tmemorystream(); process_information proc; startupinfo start; security_attributes sa; long ret; unsigned long lngbytesread; handle hreadpipe,hwritepipe; char *strbuff= new char[256]; if(strbuff==null) { return false; } sa.nlength = sizeof(security_attributes); sa.binherithandle=true; sa.lpsecuritydescriptor=null; ret=createpipe(&hreadpipe,&hwritepipe,&sa,0); if(ret==0) { //创建管道失败 return false; } memset(&start,0x00,sizeof(startupinfo)); start.cb=sizeof(startupinfo); start.dwflags=startf_usestdhandles ¦ startf_useshowwindow; start.hstdoutput=hwritepipe; start.hstderror=hwritepipe; bool retc=createprocess(null,cmd.c_str(),null,null,true, 0, 0, null, &start, &proc); if(!retc) { return false; } closehandle(hwritepipe); unsigned long len; memstream-> position=0; while(true) { memset(strbuff,0x00,256); getfilesize(hreadpipe,&len); ret = readfile(hreadpipe, strbuff, 256, &lngbytesread,null); if(ret==0) { break; } else { memstream-> write(strbuff,lngbytesread); } } closehandle(proc.hprocess); closehandle(proc.hthread); closehandle(hreadpipe); memstream-> position=0; delete strbuff; stringlist-> loadfromstream(memstream); memstream-> clear(); delete memstream; return true; } | | |
|