小弟进来写一个小程序,需要把控制台程序的命令行输出,提取出来显示在一个memo上。感觉没什么问题啊!那位大虾来看看噢!!(pf:源程序)procedure TForm1.Button1Click(Sender: TObject);
var
hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2:Thandle;
sa:SECURITY_ATTRIBUTES;
siinfo:STARTUPINFO ;
ProcessInformation:PROCESS_INFORMATION ;
s1,cmdline:string;
lbytesread:integer;
buff:pchar;
tt:cardinal;
lb:longbool ;
po:poverlapped;
begingetmem(buff,1024);
sa.nLength:=12;
sa.lpSecurityDescriptor:=0;
sa.bInheritHandle:=true;
CreatePipe(hReadPipe1,hWritePipe1,@sa,0);
cmdLine := 'ipconfig.exe';
ZeroMemory(@siinfo,sizeof(siinfo));
siinfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
siinfo.wShowWindow := SW_show;
siinfo.hStdInput:=hReadPipe2;
siinfo.hStdOutput:=hWritePipe1;
siinfo.hStdError:=hWritePipe1;
CreateProcess(nil,pchar(cmdLine),nil,nil,lb,0,nil,nil,siinfo,ProcessInformation);
while (true) do
begin
PeekNamedPipe(hReadPipe1,@Buff,1024,@lBytesRead,nil,nil);
tt:=lbytesread;
edit1.text:=inttostr(lbytesread);
if (tt<>0) then
begin
if ReadFile(hwritePipe1,Buff,10,tt,po) then
showmessage(inttostr(tt));
end;
application.ProcessMessages ;
end;
end;
var
hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2:Thandle;
sa:SECURITY_ATTRIBUTES;
siinfo:STARTUPINFO ;
ProcessInformation:PROCESS_INFORMATION ;
s1,cmdline:string;
lbytesread:integer;
buff:pchar;
tt:cardinal;
lb:longbool ;
po:poverlapped;
begingetmem(buff,1024);
sa.nLength:=12;
sa.lpSecurityDescriptor:=0;
sa.bInheritHandle:=true;
CreatePipe(hReadPipe1,hWritePipe1,@sa,0);
cmdLine := 'ipconfig.exe';
ZeroMemory(@siinfo,sizeof(siinfo));
siinfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
siinfo.wShowWindow := SW_show;
siinfo.hStdInput:=hReadPipe2;
siinfo.hStdOutput:=hWritePipe1;
siinfo.hStdError:=hWritePipe1;
CreateProcess(nil,pchar(cmdLine),nil,nil,lb,0,nil,nil,siinfo,ProcessInformation);
while (true) do
begin
PeekNamedPipe(hReadPipe1,@Buff,1024,@lBytesRead,nil,nil);
tt:=lbytesread;
edit1.text:=inttostr(lbytesread);
if (tt<>0) then
begin
if ReadFile(hwritePipe1,Buff,10,tt,po) then
showmessage(inttostr(tt));
end;
application.ProcessMessages ;
end;
end;
var
hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2:Thandle;
sa:SECURITY_ATTRIBUTES;
siinfo:STARTUPINFO ;
ProcessInformation:PROCESS_INFORMATION ;
s1,cmdline:string;
lbytesread:integer;
buff:pchar;
tt:cardinal;
lb:longbool ;
po:poverlapped;begingetmem(buff,1024);
sa.nLength:=12;
sa.lpSecurityDescriptor:=0;
sa.bInheritHandle:=true;
CreatePipe(hReadPipe1,hWritePipe1,@sa,0);
cmdLine := 'ping.exe';
ZeroMemory(@siinfo,sizeof(siinfo));
siinfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
siinfo.wShowWindow := SW_show;
siinfo.hStdInput:=hReadPipe2;
siinfo.hStdOutput:=hWritePipe1;
siinfo.hStdError:=hWritePipe1;
CreateProcess(nil,pchar(cmdLine),nil,nil,lb,0,nil,nil,siinfo,ProcessInformation);
while (true) do
begin
PeekNamedPipe(hReadPipe1,@Buff,1024,@lBytesRead,nil,nil);
tt:=lbytesread;
edit1.text:=inttostr(lbytesread);
if (tt<>0) then
begin
if ReadFile(hreadPipe1,Buff,10,tt,po) then
showmessage(inttostr(tt));
end;
application.ProcessMessages ;
end;