{***************************************************************************}
{ }
{ DelphiUIAutomation }
{ }
{ Copyright 2015 JHC Systems Limited }
{ }
{***************************************************************************}
{ }
{ Licensed under the Apache License, Version 2.0 (the "License"); }
{ you may not use this file except in compliance with the License. }
{ You may obtain a copy of the License at }
{ }
{ http://www.apache.org/licenses/LICENSE-2.0 }
{ }
{ Unless required by applicable law or agreed to in writing, software }
{ distributed under the License is distributed on an "AS IS" BASIS, }
{ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. }
{ See the License for the specific language governing permissions and }
{ limitations under the License. }
{ }
{***************************************************************************}
unit DelphiUIAutomation.Utils;
interface
uses
winapi.windows;
///
/// Starts a new process
///
/// Command to start
function ExecNewProcess(Command, Parameters : String; Wait: Boolean) : TProcessInformation;
implementation
uses
DelphiUIAutomation.Exception,
sysutils;
function ExecNewProcess(Command, Parameters : String; Wait: Boolean) : TProcessInformation;
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
UniqueString(Command);
UniqueString(parameters);
{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo), 0);
FillChar(ProcInfo,SizeOf(TProcessInformation), 0);
StartInfo.cb := SizeOf(TStartupInfo);
CreateOK := CreateProcess(PChar(Command), PChar(parameters),
nil, nil,False,
CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
{ check to see if successful }
if not CreateOK then
begin
raise EDelphiAutomationException.Create(SysErrorMessage(GetLastError()));
end;
// LEAKING them for now
// CloseHandle(ProcInfo.hProcess);
// CloseHandle(ProcInfo.hThread);
result := ProcInfo;
end;
end.