mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-11 06:59:30 +01:00
+ TProcess support
This commit is contained in:
parent
b2098c4de5
commit
023eeb3072
380
fcl/inc/process.pp
Normal file
380
fcl/inc/process.pp
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
unit Process;
|
||||||
|
|
||||||
|
{$mode delphi}
|
||||||
|
{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
Uses Classes,Pipes,Windows;
|
||||||
|
|
||||||
|
Type
|
||||||
|
TProcessOptions = (poExecuteOnCreate,poRunSuspended,poUsePipes,
|
||||||
|
poNoConsole,poStderrToOutPut,poWaitOnExit);
|
||||||
|
|
||||||
|
TCreateOptions = Set of TPRocessOptions;
|
||||||
|
|
||||||
|
TProcess = Class (TObject)
|
||||||
|
Private
|
||||||
|
FAccess : Cardinal;
|
||||||
|
FApplicationName : string;
|
||||||
|
FChildErrorStream : TOutPutPipeStream;
|
||||||
|
FChildInputSTream : TInputPipeStream;
|
||||||
|
FChildOutPutStream : TOutPutPipeStream;
|
||||||
|
FConsoleTitle : String;
|
||||||
|
FCreateOptions : TCreateOptions;
|
||||||
|
FCreationFlags : Cardinal;
|
||||||
|
FCommandLine : String;
|
||||||
|
FCurrentDirectory : String;
|
||||||
|
FDeskTop : String;
|
||||||
|
FEnvironment : Pointer;
|
||||||
|
FExitCode : Cardinal;
|
||||||
|
FHandle : THandle;
|
||||||
|
FInherithandles : LongBool;
|
||||||
|
FParentErrorStream : TInputPipeStream;
|
||||||
|
FParentInputSTream : TInputPipeStream;
|
||||||
|
FParentOutputStream : TOutPutPipeStream;
|
||||||
|
FPrepared : Boolean;
|
||||||
|
FProcessAttributes : PSecurityAttributes;
|
||||||
|
FProcessInformation : TProcessInformation;
|
||||||
|
FRunning : Boolean;
|
||||||
|
FStartupInfo : TStartupInfo;
|
||||||
|
FThreadAttributes : PSecurityAttributes;
|
||||||
|
Procedure FreeStreams;
|
||||||
|
Function GetExitStatus : Integer;
|
||||||
|
Function GetHandle : THandle;
|
||||||
|
Function GetProcessAttributes : TSecurityAttributes;
|
||||||
|
Function GetRunning : Boolean;
|
||||||
|
Function GetThreadAttributes : TSecurityAttributes;
|
||||||
|
Function GetWindowRect : TRect;
|
||||||
|
Procedure SetFillAttribute (Value : Cardinal);
|
||||||
|
Procedure SetProcessAttributes (Value : TSecurityAttributes);
|
||||||
|
Procedure SetShowWindow (Value : Word);
|
||||||
|
Procedure SetThreadAttributes (Value : TSecurityAttributes);
|
||||||
|
Procedure SetWindowColumns (Value : Cardinal);
|
||||||
|
Procedure SetWindowHeight (Value : Cardinal);
|
||||||
|
Procedure SetWindowLeft (Value : Cardinal);
|
||||||
|
Procedure SetWindowRect (Value : TRect);
|
||||||
|
Procedure SetWindowRows (Value : Cardinal);
|
||||||
|
Procedure SetWindowTop (Value : Cardinal);
|
||||||
|
Procedure SetWindowWidth (Value : Cardinal);
|
||||||
|
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 : Cardinal Read FStartupInfo.dwFillAttribute
|
||||||
|
Write SetFillAttribute;
|
||||||
|
Property Handle : THandle Read FProcessInformation.hProcess;
|
||||||
|
Property Input : TOutPutPipeStream Read FParentOutPutStream;
|
||||||
|
Property InheritHandles : LongBool Read FInheritHandles;
|
||||||
|
Property OutPut : TInputPipeStream Read FParentInputStream;
|
||||||
|
Property ProcessAttributes : TSecurityAttributes
|
||||||
|
Read GetProcessAttributes
|
||||||
|
Write SetProcessAttributes;
|
||||||
|
Property ProcessInformation : TProcessInformation
|
||||||
|
Read FPRocessInformation;
|
||||||
|
Property Running : Boolean Read GetRunning;
|
||||||
|
Property ShowWindow : Word Read FStartupInfo.wShowWindow
|
||||||
|
Write SetShowWindow;
|
||||||
|
Property StartupInfo : TStartupInfo Read FStartupInfo;
|
||||||
|
Property StdErr : TinputPipeStream Read FParentErrorStream;
|
||||||
|
Property ThreadAttributes : TSecurityAttributes
|
||||||
|
Read GetThreadAttributes
|
||||||
|
Write SetThreadAttributes;
|
||||||
|
Property ThreadHandle : THandle Read FprocessInformation.hThread;
|
||||||
|
Property WindowColumns : Cardinal Read FStartupInfo.dwXCountchars
|
||||||
|
Write SetWindowColumns;
|
||||||
|
Property WindowHeight : Cardinal Read FStartupInfo.dwYsize
|
||||||
|
Write SetWindowHeight;
|
||||||
|
Property WindowLeft : Cardinal Read FStartupInfo.dwx
|
||||||
|
Write SetWindowLeft;
|
||||||
|
Property WindowRows : Cardinal Read FStartupInfo.dwYcountChars
|
||||||
|
Write SetWindowRows;
|
||||||
|
Property WindowTop : Cardinal Read FStartupInfo.dwy
|
||||||
|
Write SetWindowTop ;
|
||||||
|
Property WindowWidth : Cardinal Read FStartupInfo.dwXsize
|
||||||
|
Write SetWindowWidth;
|
||||||
|
Property WindowRect : Trect Read GetWindowRect
|
||||||
|
Write SetWindowRect;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
Constructor TProcess.Create (Const ACommandline : String;
|
||||||
|
Options : TCreateOptions);
|
||||||
|
begin
|
||||||
|
Inherited create;
|
||||||
|
FCreateOptions:=Options;
|
||||||
|
FCommandLine:=ACommandLine;
|
||||||
|
FAccess:=PROCESS_ALL_ACCESS;
|
||||||
|
FStartupInfo.cb:=SizeOf(TStartupInfo);
|
||||||
|
FInheritHandles:=True;
|
||||||
|
If poExecuteOnCreate in FCreateOptions then
|
||||||
|
execute;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Destructor TProcess.Destroy;
|
||||||
|
|
||||||
|
begin
|
||||||
|
If assigned (FProcessAttributes) then Dispose (FPRocessAttributes);
|
||||||
|
If assigned (FThreadAttributes) then Dispose (FThreadAttributes);
|
||||||
|
FreeStreams;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.FreeStreams;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FParentErrorStream.Free;
|
||||||
|
FParentInputSTream.Free;
|
||||||
|
FParentOutputStream.Free;
|
||||||
|
FChildErrorStream.free;
|
||||||
|
FChildInputSTream.Free;
|
||||||
|
FChildOutPutStream.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetExitStatus : Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
If FRunning then
|
||||||
|
GetExitCodeProcess(Handle,@FExitCode);
|
||||||
|
Result:=FExitCode;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetHandle : THandle;
|
||||||
|
|
||||||
|
begin
|
||||||
|
IF FHandle=0 Then
|
||||||
|
FHandle:=OpenProcess (FAccess,True,FProcessInformation.dwProcessId);
|
||||||
|
Result:=FHandle
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetProcessAttributes : TSecurityAttributes;
|
||||||
|
|
||||||
|
Var P : PSecurityAttributes;
|
||||||
|
|
||||||
|
begin
|
||||||
|
IF not Assigned(FProcessAttributes) then
|
||||||
|
begin
|
||||||
|
// Provide empty dummy value;
|
||||||
|
New(p);
|
||||||
|
Fillchar(p^,Sizeof(TSecurityAttributes),0);
|
||||||
|
Result:=p^;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
REsult:=FProcessAttributes^;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetRunning : Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
IF FRunning then
|
||||||
|
Frunning:=GetExitStatus=Still_Active;
|
||||||
|
Result:=FRunning;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetThreadAttributes : TSecurityAttributes;
|
||||||
|
|
||||||
|
Var P : PSecurityAttributes;
|
||||||
|
|
||||||
|
begin
|
||||||
|
IF not Assigned(FThreadAttributes) then
|
||||||
|
begin
|
||||||
|
// Provide empty dummy value;
|
||||||
|
New(p);
|
||||||
|
Fillchar(p^,Sizeof(TSecurityAttributes),0);
|
||||||
|
Result:=p^;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result:=FThreadAttributes^;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetProcessAttributes (Value : TSecurityAttributes);
|
||||||
|
|
||||||
|
begin
|
||||||
|
If not Assigned (FProcessAttributes) then
|
||||||
|
New(FProcessAttributes);
|
||||||
|
FPRocessAttributes^:=VAlue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetThreadAttributes (Value : TSecurityAttributes);
|
||||||
|
|
||||||
|
begin
|
||||||
|
If not Assigned (FThreadAttributes) then
|
||||||
|
New(FThreadAttributes);
|
||||||
|
FThreadAttributes^:=VAlue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.Execute;
|
||||||
|
|
||||||
|
Var PName,PDir : PChar;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if poNoConsole in FCReateOptions then
|
||||||
|
FCreationFlags:=FCreationFlags or Detached_Process;
|
||||||
|
If poRunSuspended in FCreateOptions Then
|
||||||
|
FCreationFlags:=FCreationFlags or Create_Suspended;
|
||||||
|
If poUsePipes in FCreateOptions then
|
||||||
|
begin
|
||||||
|
FreeStreams;
|
||||||
|
{ // This construct was supported on Win32 only. The new call takes this as a default.
|
||||||
|
CreatePipeStreams (FChildInputSTream,FParentOutPutStream,@piInheritablePipe,1024);
|
||||||
|
CreatePipeStreams (FParentInputStream,FChildOutPutStream,@piInheritablePipe,1024);
|
||||||
|
}
|
||||||
|
CreatePipeStreams (FChildInputSTream,FParentOutPutStream);
|
||||||
|
CreatePipeStreams (FParentInputStream,FChildOutPutStream);
|
||||||
|
if poStdErrToOutPut in FCreateOptions then
|
||||||
|
{
|
||||||
|
CreatePipeStreams (FParentErrorStream,FChildErrorStream,@piInheritablePipe,1024)
|
||||||
|
}
|
||||||
|
CreatePipeStreams (FParentErrorStream,FChildErrorStream)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
FChildErrorStream:=FChildOutPutStream;
|
||||||
|
FParentErrorStream:=FParentInputStream;
|
||||||
|
end;
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseStdHandles;
|
||||||
|
FStartupInfo.hStdInput:=FChildInputStream.Handle;
|
||||||
|
FStartupInfo.hStdOutput:=FChildOutPutStream.Handle;
|
||||||
|
FStartupInfo.hStdError:=FChildErrorStream.Handle;
|
||||||
|
end;
|
||||||
|
If FApplicationName<>'' then PName:=Pchar(FApplicationName) else PName:=Nil;
|
||||||
|
If FCurrentDirectory<>'' then PName:=Pchar(FCurrentDirectory) else PDir:=Nil;
|
||||||
|
CreateProcess (Pname,PChar(FCommandLine),FProcessAttributes,FThreadAttributes,
|
||||||
|
FInheritHandles,FCreationFlags,FEnvironment,PDir,@FStartupInfo,
|
||||||
|
@fProcessInformation);
|
||||||
|
FRunning:=True;
|
||||||
|
if (poWaitOnExit in FCreateOptions) and
|
||||||
|
not (poRunSuspended in FCreateOptions) then
|
||||||
|
WaitOnExit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.WaitOnExit : Dword;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=WaitForSingleObject (FprocessInformation.hProcess,Infinite);
|
||||||
|
If Result<>Wait_Failed then
|
||||||
|
GetExitStatus;
|
||||||
|
FRunning:=False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.Suspend : Longint;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=SuspendThread(ThreadHandle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.Resume : LongInt;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=ResumeThread(ThreadHandle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.Terminate(AExitCode : Integer) : Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=False;
|
||||||
|
If ExitStatus=Still_active then
|
||||||
|
Result:=TerminateProcess(Handle,AexitCode);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetFillAttribute (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseFillAttribute;
|
||||||
|
FStartupInfo.dwFillAttribute:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetShowWindow (Value : Word);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseShowWindow;
|
||||||
|
FStartupInfo.dwXCountChars:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowColumns (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseCountChars;
|
||||||
|
FStartupInfo.dwXCountChars:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowHeight (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UsePosition;
|
||||||
|
FStartupInfo.dwYsize:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowLeft (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseSize;
|
||||||
|
FStartupInfo.dwx:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowTop (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseSize;
|
||||||
|
FStartupInfo.dwy:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowWidth (Value : Cardinal);
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UsePosition;
|
||||||
|
FStartupInfo.dwxsize:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Function TProcess.GetWindowRect : TRect;
|
||||||
|
begin
|
||||||
|
With Result do
|
||||||
|
With FStartupInfo do
|
||||||
|
begin
|
||||||
|
Left:=dwx;
|
||||||
|
Right:=dwx+dwxSize;
|
||||||
|
Top:=dwy;
|
||||||
|
Bottom:=dwy+dwysize;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowRect (Value : Trect);
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseSize;
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UsePosition;
|
||||||
|
With Value do
|
||||||
|
With FStartupInfo do
|
||||||
|
begin
|
||||||
|
dwx:=Left;
|
||||||
|
dwxSize:=Right-Left;
|
||||||
|
dwy:=Top;
|
||||||
|
dwySize:=Bottom-top;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Procedure TProcess.SetWindowRows (Value : Cardinal);
|
||||||
|
|
||||||
|
begin
|
||||||
|
FStartupInfo.dwFlags:=FStartupInfo.dwFlags or Startf_UseCountChars;
|
||||||
|
FStartupInfo.dwYCountChars:=Value;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
280
fcl/inc/process.txt
Normal file
280
fcl/inc/process.txt
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
This file describes the TProcess object.
|
||||||
|
|
||||||
|
The TProcess object provides an easy way to start and manipulate
|
||||||
|
the running of other programs (processes) by your application.
|
||||||
|
On top of that, it allows you to redirect the program's input, output
|
||||||
|
and standard error to streams that are readable/writeable by your
|
||||||
|
program.
|
||||||
|
|
||||||
|
It is a descendent class of TObject, but this is easily changeable to
|
||||||
|
TComponent, should you desire to do so. None of the properties will
|
||||||
|
conflict with the existing properties of TComponent.
|
||||||
|
|
||||||
|
Furthermore it is written in such a way that it is easily extensible,
|
||||||
|
although most of the properties that a Process has, are accessible and
|
||||||
|
can be controlled with this object.
|
||||||
|
|
||||||
|
In what follows, is a description of the object's methods and properties.
|
||||||
|
|
||||||
|
The following two types control the creation of the TProcess Object.
|
||||||
|
See The constructor description for a description on what they do.
|
||||||
|
|
||||||
|
TProcessOptions = (poExecuteOnCreate,poRunSuspended,poUsePipes,
|
||||||
|
poNoConsole,poStderrToOutPut,poWaitOnExit);
|
||||||
|
TCreateOptions = Set of TPRocessOptions;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Constructor Create (Const ACommandline : String;
|
||||||
|
Options : TCreateOptions);
|
||||||
|
|
||||||
|
This creates an TPRocess object.
|
||||||
|
|
||||||
|
ACommandline is the commandline to execute, including any options
|
||||||
|
you wish to pass to the program. If you don't specify an explicit path
|
||||||
|
Windows will look for your program in the Windows directory and in the
|
||||||
|
path.
|
||||||
|
|
||||||
|
Options control the behaviour of the object. It can be a set of the
|
||||||
|
following constants:
|
||||||
|
|
||||||
|
poExecuteOnCreate
|
||||||
|
If you include this option, the constructor will immediatly
|
||||||
|
call the Execute method, using default settings for all parameters.
|
||||||
|
This has the effect that the program is run at once.
|
||||||
|
|
||||||
|
poRunSuspended
|
||||||
|
If you include this option, the Execute method will start the
|
||||||
|
program in a suspended state, and the program will start running
|
||||||
|
only after you have called the Resume method.
|
||||||
|
|
||||||
|
poUsePipes
|
||||||
|
If you include this option, the Execute method will redirect the
|
||||||
|
standard input,output and error descriptors to 3 pipes, which you
|
||||||
|
can read from or write to.
|
||||||
|
(see Input,OutPut and Error properties)
|
||||||
|
It makes little sense to use ths for GUI applications (i.e. non-
|
||||||
|
console applications)
|
||||||
|
|
||||||
|
poNoConsole
|
||||||
|
If you include this option, the application will not display a
|
||||||
|
console, untill it explicitly needs one or requests one using the
|
||||||
|
AllocConsole method. This is very convenient in combination with the
|
||||||
|
poUsePipes option, allowing you to run an application without getting
|
||||||
|
the Console window, and being able to read it's output at once.
|
||||||
|
|
||||||
|
poStderrToOutPut
|
||||||
|
If This option is included, then the error desciptor is redirected to
|
||||||
|
the standard output director, i.e. all output goes to the standard
|
||||||
|
output.
|
||||||
|
|
||||||
|
poWaitOnExit
|
||||||
|
If you specify this option, then the Execute method will wait for the
|
||||||
|
executed program to finish, before returning.
|
||||||
|
This option will be ignored if you also specified ExecuteOnCreate and
|
||||||
|
CreateSuspended.
|
||||||
|
|
||||||
|
|
||||||
|
Destructor Destroy; virtual;
|
||||||
|
|
||||||
|
Destroys the TProcess Object. Be careful NOT to close a TProcess
|
||||||
|
object when you use pipes, and the application is still running.
|
||||||
|
you may kill it.
|
||||||
|
|
||||||
|
Procedure Execute; virtual;
|
||||||
|
This actually runs the application. It will return immediatly, unless
|
||||||
|
you specified the poWaitOnExit option when creating the object.
|
||||||
|
|
||||||
|
Function Resume : Integer; virtual;
|
||||||
|
Resume lowers the suspend count of the application.
|
||||||
|
it returns the new suspend count of the application. As long as the
|
||||||
|
suspend count is larger than 0, the application will not run.
|
||||||
|
If the suspend count reaches 0, the application will continue
|
||||||
|
running.
|
||||||
|
|
||||||
|
Function Suspend : Integer; virtual;
|
||||||
|
Increases the suspend count of the application, and returns the
|
||||||
|
new suspend count of the application.
|
||||||
|
|
||||||
|
Function Terminate (AExitCode : Integer): Boolean; virtual;
|
||||||
|
Terminate terminates the main thread of the application, giving it
|
||||||
|
exitcode 'AExitCode'
|
||||||
|
It returns True on succes, False on failure.
|
||||||
|
|
||||||
|
Function WaitOnExit : Integer;
|
||||||
|
This function returns immediatly if the application is not running,
|
||||||
|
and waits for the application to finish if it was still running.
|
||||||
|
|
||||||
|
Property ApplicationName : String;
|
||||||
|
Sets the name of the application.
|
||||||
|
|
||||||
|
Property CommandLine : String;
|
||||||
|
Read-Only
|
||||||
|
contains the commandline of the application, as set by the create
|
||||||
|
method of TProcess.
|
||||||
|
|
||||||
|
Property ConsoleTitle : String;
|
||||||
|
For console applications only :
|
||||||
|
Sets the title that appears in the title bar of the Console window.
|
||||||
|
|
||||||
|
Property CreateOptions : TCreateOptions;
|
||||||
|
Read-Only
|
||||||
|
Contains the options as set by the Create method of TProcess.
|
||||||
|
|
||||||
|
Property CreationFlags : Cardinal;
|
||||||
|
This contains the creation flags that are passed to the CreateProcess
|
||||||
|
call. These flags are modified by the Execute call to reflect any
|
||||||
|
settings tat you may have made.
|
||||||
|
|
||||||
|
Property CurrentDirectory : String;
|
||||||
|
When set, the process wil start in the directory that you have set
|
||||||
|
for it.
|
||||||
|
|
||||||
|
Property DeskTop : String;
|
||||||
|
NT only:
|
||||||
|
Contains the name of the desktop or window station that the process
|
||||||
|
will be run on. See STARTUPINFO in the win32 programmers manual.
|
||||||
|
|
||||||
|
Property Environment : Pointer;
|
||||||
|
A pointer to a null-terminated list of environment variable pointers.
|
||||||
|
Each pair is of the form 'Name=Value'.
|
||||||
|
If this is nil, the environment of your application is used.
|
||||||
|
|
||||||
|
Property ExitStatus : Integer;
|
||||||
|
Read-Only
|
||||||
|
This returns the exit status of the application, or STILL_ACTIVE
|
||||||
|
(defined in Windows.pas) if the application is still running.
|
||||||
|
|
||||||
|
Property FillAttribute : Integer;
|
||||||
|
For console processes only.
|
||||||
|
Sets the fill color for the console window.
|
||||||
|
|
||||||
|
Property Handle : THandle;
|
||||||
|
Read-Only;
|
||||||
|
Returns the handle of the process, which can be used to pass on to
|
||||||
|
calls that require a handle of a process.
|
||||||
|
Onl valid if the process is running.
|
||||||
|
|
||||||
|
|
||||||
|
Property Input : TOutPutPipeStream;
|
||||||
|
Read-Only
|
||||||
|
Returns the Input handle of the process.
|
||||||
|
Anything you write to this stream, will appear on the applications
|
||||||
|
input file descriptor.
|
||||||
|
Only valid if you used poUsePipes when you created the TProcess
|
||||||
|
object.
|
||||||
|
|
||||||
|
Property InheritHandles : LongBool;
|
||||||
|
If you set this to true, each inheritable handle of your application
|
||||||
|
is inherited by the new application.
|
||||||
|
|
||||||
|
Property OutPut : TInputPipeStream;
|
||||||
|
Read-Only
|
||||||
|
Returns the Output handle of the process. Anything the process writes
|
||||||
|
to its standard output can be read from this stream.
|
||||||
|
Only valid if you used poUsePipes when you created the TProcess
|
||||||
|
object.
|
||||||
|
|
||||||
|
Property ProcessAttributes : TSecurityAttributes;
|
||||||
|
|
||||||
|
Property ProcessInformation : TProcessInformation;
|
||||||
|
Read-Only
|
||||||
|
Gives access to the ProcessInformation returned by Windows
|
||||||
|
upon executing the program. This contains
|
||||||
|
hProcess : Process Handle (See Handle property)
|
||||||
|
hThread : Process' main thread handle (See ThreadHandle property)
|
||||||
|
dwProcessId : Process ID. (as seen in the task manager)
|
||||||
|
dwThreadId : Process' main thread ID
|
||||||
|
|
||||||
|
Property Running : Boolean;
|
||||||
|
Read-Only
|
||||||
|
Retruns True if the application is still running, False otherwise.
|
||||||
|
If the application is suspended or not doesn't affect the result.
|
||||||
|
|
||||||
|
Property ShowWindow : Word;
|
||||||
|
You can set the applications ShowWindow attribute here.
|
||||||
|
|
||||||
|
Property StartupInfo : TStartupInfo;
|
||||||
|
Read-Only
|
||||||
|
Gives access to the TStartupInfo that will be passed to the
|
||||||
|
application in the CreateProcess Call. You can manipulate its various
|
||||||
|
members through the properties of the TProcess object.
|
||||||
|
|
||||||
|
Property StdErr : TinputPipeStream;
|
||||||
|
Read-Only
|
||||||
|
Returns the Output handle of the process. Anything the process writes
|
||||||
|
to its error output can be read from this stream.
|
||||||
|
Only valid if you used poUsePipes when you created the TProcess
|
||||||
|
object.
|
||||||
|
If you specified poStderrToOutput then this is the same as the
|
||||||
|
'Output' stream.
|
||||||
|
|
||||||
|
Property ThreadAttributes : TSecurityAttributes;
|
||||||
|
Contains the security attributes that will be passed to the process'
|
||||||
|
main thread. By default, no security attributes are passed.
|
||||||
|
|
||||||
|
Property ThreadHandle : THandle;
|
||||||
|
Read-Only
|
||||||
|
Returns the Handle of the process' main thread.
|
||||||
|
|
||||||
|
Property WindowColumns : Integer;
|
||||||
|
For console applications:
|
||||||
|
This will set the number of screen columns that the console window
|
||||||
|
will have.
|
||||||
|
If you don't set this property nor the WindowRows property, Windows will
|
||||||
|
choose default values.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowHeight : Integer;
|
||||||
|
Set the height of the application's main window.
|
||||||
|
If you don't specify this, nor WindowWidth, Windows will choose
|
||||||
|
the height and Width of the applications window.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowLeft : Integer;
|
||||||
|
Set the applications main window position, in pixels from the left
|
||||||
|
side of the screen.
|
||||||
|
If you don't specify this, nor WindowTop, Windows will choose
|
||||||
|
the Left and Top of the applications window.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowRows : Integer;
|
||||||
|
For console applications:
|
||||||
|
This will set the number of screen rows (lines) that the console window
|
||||||
|
will have.
|
||||||
|
If you don't set this property nor the WindowColumns property, Windows will
|
||||||
|
choose default values.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowTop : Integer;
|
||||||
|
Set the applications main window position, in pixels from the Top
|
||||||
|
side of the screen.
|
||||||
|
If you don't specify this, nor WindowLeft, Windows will choose
|
||||||
|
the Left and Top of the applications window.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowWidth : Integer;
|
||||||
|
Set the Width of the application's main window.
|
||||||
|
If you don't specify this, nor WindowWidth, Windows will choose
|
||||||
|
the height and Width of the applications window.
|
||||||
|
You can only set this PRIOR to calling the execute method, after
|
||||||
|
the application was executed, or while it is running, the setting
|
||||||
|
will be ignored until you run it again.
|
||||||
|
|
||||||
|
Property WindowRect : Trect;
|
||||||
|
This sets the bounding rectangle of the application's main window.
|
||||||
|
It allows to set the WindowTop, WindowLeft, WindowHeight, WindowWidth
|
||||||
|
properties in 1 call.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
[targets]
|
[targets]
|
||||||
units=classes $(INCUNITS) $(XMLUNITS) $(SHEDITUNITS)
|
units=classes $(INCUNITS) $(XMLUNITS) $(SHEDITUNITS) process
|
||||||
|
|
||||||
[defaults]
|
[defaults]
|
||||||
defaulttarget=win32
|
defaulttarget=win32
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user