delphi调用WinExec或ShellExecute执行了外部的数据操作,该怎么让数据操作完毕后再继续执行delphi里面的代码

delphi调用WinExec或ShellExecute执行了外部的数据操作,该如何让数据操作完毕后再继续执行delphi里面的代码
新人一枚,求大神讲解。delphi调用WinExec或ShellExecute执行了外部的数据操作,该怎么让数据操作完毕后再继续执行delphi里面的代码

------解决方案--------------------

 var ProcessInfo : PROCESS_INFORMATION ; 
     StartupInfo : STARTUPINFO ; 
 fillchar(StartupInfo, sizeof(StartupInfo),0);
 StartupInfo.cb := sizeof(StartupInfo) ; 
 if(CreateProcess("c:\winnt\notepad.exe", nil, 
 nil,nil,FALSE,0,nil,
 nil,@StartupInfo,@ProcessInfo)) then
 begin 
   WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
   CloseHandle(ProcessInfo.hThread);
   CloseHandle(ProcessInfo.hProcess);
 end
 else
   MessageBox("The process could not be started...");

------解决方案--------------------
function RunWait(FileName: string; Visibility: Integer): THandle;
var
    zAppName: array[0..512] of Char;
    zCurDir: array[0..255] of Char;
    WorkDir: string;
    StartupInfo: TStartupInfo;
    ProcessInfo: TProcessInformation;
begin
    try
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
      StartupInfo.cb := SizeOf(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil, zAppName, nil, nil, false, Create_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
      begin
        result := 0;
        Exit;