-
2005-09-03
BCB中管道应用示例 - [C++Builder技术文档]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
//--------------------------------------------------------------------------- #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; } //---------------------------------------------------------------------------
http://jiamingsoft.yourblog.org/logs/428840.html
随机文章:
皮肤技术研究 2004-04-24Winamp插件研究[转自CSDN] 2004-04-18LRC格式歌词分解程序 2004-04-11Unicode编码文件的读取 2004-04-11鼠标轨迹记录器 2004-04-03
收藏到:Del.icio.us
<< 媒体播放器==开发中。。。 | 首页 |





