{***************************************************************************} { } { 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.