void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readBuf[5000];
DWORD bytesRead=0;
HANDLE hReadPipe,hWritePipe;
PROCESS_INFORMATION pi;
LPPROCESS_INFORMATION lppi;
SECURITY_ATTRIBUTES lsa; //安全属性
STARTUPINFO myStartup;
lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = true;
lppi = π
//创建管道
if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
ShowMessage("Pipe Created OK ./n");
else{
ShowMessage("Pipe Creation Error");
return;
}
memset(&myStartup,0,sizeof(STARTUPINFO));
myStartup.cb = sizeof(STARTUPINFO);
myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
myStartup.wShowWindow = SW_HIDE;
myStartup.hStdOutput = hWritePipe;
if(!CreateProcess("d://test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&pi)){
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
return;
}
while(true){
bytesRead = 0;
if(!PeekNamedPipe(hReadPipe,readBuf,1,&bytesRead,NULL,NULL))
break;
if(bytesRead){
if(!ReadFile(hReadPipe,readBuf,4096,&bytesRead,NULL))
break;
readBuf[bytesRead] = 0;
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}else{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
Sleep(256);
}
}
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);