其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
CBuilder中使用管道技术实例

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

废话不多说,大家来看代码

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)
    {
        //创建管道失败
        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;
}

以上为一个使用管道获取命令行模式的程序的运行结果的函数。

使用代码

TStringList *StrList=new TStringList;
AnsiString strcmd;

RunCmd(strcmd,StrList);

结果保留再StrList中。

 




相关文章

相关软件