• //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)
    {
    TMemoryStream *memstream=new TMemoryStream();
    AnsiString rn="\\r\\n";
    PROCESS_INFORMATION proc;
    STARTUPINFO start;
    SECURITY_ATTRIBUTES sa;
    long ret;
    unsigned long lngBytesread;
    HANDLE hReadPipe,hWritePipe;
    char *strBuff=(char *)malloc(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)
    {
    //创建管道失败
    ShowMessage("创建管道失败");
    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;
    free(strBuff);
    stringlist->LoadFromStream(memstream);
    memstream->Clear();
    delete memstream;
    return true;
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TStringList *StrList=new TStringList;
    AnsiString strcmd=Edit1->Text;
    RunCmd(strcmd,StrList);
    Memo1->Clear();
    Memo1->Text=StrList->Text;
    }
    //---------------------------------------------------------------------------