//这种情况一般用于2进程间有依附关系,类似于Form的ShowModal //但它的作用不仅仅在进程等待,我们常常用它来做线程同步 //该函数的功能为一直在等待Notepad执行,直到Notepad关闭为止 function WinExecAndWait32(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer; var vStartupInfo: TStartupInfo; vProcessInfo: TProcessInformation; begin FillChar(vStartupInfo, SizeOf(TStartupInfo), 0); with vStartupInfo do begin cb := SizeOf(TStartupInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := ACmdShow; end; if CreateProcess(nil, APath, nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, vStartupInfo, vProcessInfo) then Result := WaitForSingleObject(vProcessInfo.hProcess, ATimeout) else Result := GetLastError; end; procedure TForm1.Button1Click(Sender: TObject); begin WinExecAndWait32('notepad.exe', SW_SHOW, INFINITE); end;