{ $Id$ This file is part of the Free Pascal run time library. Copyright (c) 1999-2000 by Michael Van Canneyt See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} unit Process; {$mode delphi} {$H+} interface Uses Classes,Pipes; Type THandle = Longint; Type TProcessOptions = (poExecuteOnCreate,poRunSuspended,poUsePipes, poNoConsole,poStderrToOutPut,poWaitOnExit); TCreateOptions = Set of TPRocessOptions; TProcess = Class (TObject) Private FShowWindow : Boolean; FFillAttribute, FWindowColumns, FWindowHeight, FWindowLeft, FWindowRows, FWindowTop, FWindowWidth : Longint; FWindowRect : TRect; FApplicationName : string; FChildErrorStream : TOutPutPipeStream; FChildInputSTream : TInputPipeStream; FChildOutPutStream : TOutPutPipeStream; FConsoleTitle : String; FCreateOptions : TCreateOptions; FCreationFlags : Cardinal; FCommandLine : String; FCurrentDirectory : String; FDeskTop : String; FEnvironment : Pointer; FExitCode : Cardinal; FPID : Longint; FThreadHandle, FHandle : THandle; FInherithandles : LongBool; FParentErrorStream : TInputPipeStream; FParentInputSTream : TInputPipeStream; FParentOutputStream : TOutPutPipeStream; FPrepared : Boolean; FRunning : Boolean; Procedure FreeStreams; Function GetExitStatus : Integer; Function GetRunning : Boolean; Function GetWindowRect : TRect; Procedure SetWindowRect (Value : TRect); Public Constructor Create (Const ACommandline : String; Options : TCreateOptions); Destructor Destroy; override; Procedure Execute; virtual; Function Resume : Integer; virtual; Function Suspend : Integer; virtual; Function Terminate (AExitCode : Integer): Boolean; virtual; Function WaitOnExit : DWord; Property ApplicationName : String Read FApplicationname Write FApplicationname; Property CommandLine : String Read FCommandLine; Property ConsoleTitle : String Read FConsoleTitle Write FConsoleTitle; Property CurrentDirectory : String Read FCurrentDirectory Write FCurrentDirectory; Property CreateOptions : TCreateOptions Read FCreateOptions; Property CreationFlags : Cardinal Read FCreationFlags Write FCreationFlags; Property DeskTop : String Read FDeskTop Write FDeskTop; Property Environment : Pointer Read FEnvironment Write FEnvironment; Property ExitStatus : Integer Read GetExitStatus; Property FillAttribute : Longint Read FFillAttribute Write FFillAttribute; Property Handle : THandle Read FHandle; Property ThreadHandle : THandle Read FThreadHandle; Property PID : Longint; Property Input : TOutPutPipeStream Read FParentOutPutStream; Property InheritHandles : LongBool Read FInheritHandles; Property OutPut : TInputPipeStream Read FParentInputStream; Property Running : Boolean Read GetRunning; Property ShowWindow : Boolean Read FShowWindow Write FShowWindow; Property StdErr : TinputPipeStream Read FParentErrorStream; Property WindowColumns : Longint Read FWindowColumns Write FWindowColumns; Property WindowHeight : Longint Read FWindowHeight Write FWindowHeight; Property WindowLeft : Longint Read FWindowLeft Write FWindowLeft; Property WindowRows : Longint Read FWindowRows Write FWindowRows; Property WindowTop : Longint Read FWindowTop Write FWindowTop; Property WindowWidth : Longint Read FWindowWidth Write FWindowWidth; Property WindowRect : Trect Read GetWindowRect Write SetWindowRect; end; implementation {$i process.inc} Constructor TProcess.Create (Const ACommandline : String; Options : TCreateOptions); begin Inherited create; FCreateOptions:=Options; FCommandLine:=ACommandLine; FInheritHandles:=True; FFillAttribute := -1; FWindowColumns := -1; FWindowHeight := -1; FWindowLeft := -1; FWindowRows := -1; FWindowTop := -1; FWindowWidth := -1; If poExecuteOnCreate in FCreateOptions then execute; end; Destructor TProcess.Destroy; begin FreeStreams; end; Procedure TProcess.FreeStreams; begin if FChildErrorStream<>FChildoutputStream then begin FChildErrorStream.free; FParentErrorStream.free; end; FParentInputSTream.Free; FParentOutputStream.Free; FChildInputSTream.Free; FChildOutPutStream.Free; end; Function TProcess.GetExitStatus : Integer; begin { If FRunning then GetExitCodeProcess(Handle,@FExitCode); } Result:=FExitCode; end; Function TProcess.GetWindowRect : TRect; begin With Result do begin Left:=FWindowLeft; Top:=FWindowTop; Right:=FWindowLeft+FWindowWidth; Bottom:=FWindowTop+FWindowRows; end; end; Procedure TProcess.SetWindowRect (Value : classes.Trect); begin With Value do begin FWindowLeft:=Left; FWindowWidth:=Right-Left; FWindowTop:=Top; FWindowRows:=Bottom-top; end; end; end. { $Log$ Revision 1.2 2000-07-13 11:33:00 michael + removed logs }