Hi All, I have the following code working well with TProcess outputting to a TMemo, however, what I'd like to do it monitor the output and then when a certain string is detected, I'd like to feed back to the process. That is, if the TProcess outputs a question, I'd like to feed back either a "y" or a "n" as if the user pressed it manually.
Hope that makes sense Any ideas where to tweak? Thanks Richard const C_BUFSIZE = 2048; var Hbk: TProcess; Buffer: pointer; SStream: TStringStream; nread: longint; begin Hbk := TProcess.Create(nil); // Replace the line below with your own command string Hbk.CommandLine := 'c:\windows\system32\cmd.exe /c dir c:\windows\*.*'; // Hbk.Options := [poUsePipes]; Hbk.Execute; // Prepare for capturing output Getmem(Buffer, C_BUFSIZE); SStream := TStringStream.Create(''); // Start capturing output while Hbk.Running do begin nread := Hbk.Output.Read(Buffer^, C_BUFSIZE); if nread = 0 then sleep(100) else begin // Translate raw input to a string SStream.size := 0; SStream.Write(Buffer^, nread); // And add the raw stringdata to the memo Memo1.Lines.Text := Memo1.Lines.Text + SStream.DataString; end; end; // Capture remainder of the output repeat nread := Hbk.Output.Read(Buffer^, C_BUFSIZE); if nread > 0 then begin SStream.size := 0; SStream.Write(Buffer^, nread); Memo1.Lines.Text := Memo1.Lines.Text + SStream.Datastring; end until nread = 0; // Clean up Hbk.Free; Freemem(buffer); SStream.Free; end;
-- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus