123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- {
- $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
-
- }
|