Mega Code Archive

 
Categories / Delphi / Ide Indy
 

How do I execute another program from my Delphi application 2

Title: How do I execute another program from my Delphi application 2 This function encapslates the API Functions CreateProcess and WaitForSingleObject, createprocess effectivly starts the new process (program) in a new thread so the calling program can continue to run concurrently. The timeout value can be used to force the process to terminate. CODE { Useage: Filename, The file to be executed Params, Any parameters that require passing to the file Timeout, Time to wait in mS. Pass the constant INFINITE to wait forever Visibility, Run window status e.g SW_SHOW, SW_MAXIMIZE It returns a string containing the last error if any } function WaitProcess(Filename: TFilename; Params: string; Timeout: DWORD; Visibility: integer): string; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; WaitResult: integer; begin ZeroMemory(@StartupInfo, SizeOf(TStartupInfo)); with StartupInfo do begin cb := SizeOf(TStartupInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := Visibility; end; if fileexists(filename) or fileexists(params) then begin if (CreateProcess(nil, Pchar(Filename +' '+ Params), Nil, Nil, False, NORMAL_PRIORITY_CLASS, Nil, nil { pchar(extractfilepath(Params))}, StartupInfo, ProcessInfo)) then begin WaitResult := WaitForSingleObject(ProcessInfo.hProcess, Timeout); if WaitResult = WAIT_TIMEOUT then begin result := 'Timeout has occured in waiting for result from compiler.'; TerminateProcess(ProcessInfo.hprocess, 1); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); exit; end; CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); Result := 'OK'; end else result := 'Create Proccess failed ' + filename + ' '+ Params+ ' Error: '+inttostr(getlasterror); end else result := 'Process file does not exist'; end;