Knocker 发表于 2006-3-27 12:43

CBuilder中使用管道技术实例

<P>废话不多说,大家来看代码</P>
<P>bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)<BR>{<BR>    TMemoryStream *memstream=new TMemoryStream();<BR>    AnsiString rn="<a>\\r\\n</A>";<BR>    PROCESS_INFORMATION proc;<BR>    STARTUPINFO start;<BR>    SECURITY_ATTRIBUTES sa;<BR>    long ret;<BR>    unsigned long lngBytesread;<BR>    HANDLE hReadPipe,hWritePipe;<BR>    char *strBuff=(char *)malloc(256);<BR>    if(strBuff==NULL)<BR>    {<BR>        return false;<BR>    }<BR>    sa.nLength = sizeof(SECURITY_ATTRIBUTES);<BR>    sa.bInheritHandle=true;<BR>    sa.lpSecurityDescriptor=NULL;<BR>    ret=CreatePipe(&amp;hReadPipe,&amp;hWritePipe,&amp;sa,0);<BR>    if(ret==0)<BR>    {<BR>        //创建管道失败<BR>        return false;<BR>    }<BR>    memset(&amp;start,0x00,sizeof(STARTUPINFO));<BR>    start.cb=sizeof(STARTUPINFO);<BR>    start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;<BR>    start.hStdOutput=hWritePipe;<BR>    start.hStdError=hWritePipe;<BR>    bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &amp;start, &amp;proc);<BR>    if(!retc)<BR>    {<BR>        return false;<BR>    }<BR>    CloseHandle(hWritePipe);<BR>    unsigned long len;<BR>    memstream-&gt;Position=0;<BR>    while(true)<BR>    {<BR>        memset(strBuff,0x00,256);<BR>        GetFileSize(hReadPipe,&amp;len);<BR>        ret = ReadFile(hReadPipe, strBuff, 256, &amp;lngBytesread,NULL);<BR>        if(ret==0)<BR>        {<BR>            break;<BR>        }<BR>        else<BR>        {<BR>            memstream-&gt;Write(strBuff,lngBytesread);<BR>        }<BR>    }<BR>    CloseHandle(proc.hProcess);<BR>    CloseHandle(proc.hThread);<BR>    CloseHandle(hReadPipe);<BR>    memstream-&gt;Position=0;<BR>    free(strBuff);<BR>    stringlist-&gt;LoadFromStream(memstream);<BR>    memstream-&gt;Clear();<BR>    delete memstream;<BR>    return true;<BR>}</P>
<P>以上为一个使用管道获取命令行模式的程序的运行结果的函数。</P>
<P>使用代码</P>
<P>TStringList *StrList=new TStringList;<BR>AnsiString strcmd;</P>
<P>RunCmd(strcmd,StrList);</P>
<P>结果保留再StrList中。<BR></P>


页: [1]

编程论坛