作者:陆岛工作室

实现执行外部程序,并等待程序结束的函数。

type
  TExecState = (esNormal, esMinimized, esMaximized, esHidden);

 function ExecuteFileWait(Handle: HWND; const FileName, Params, StartDir: string; InitialState: TExecState): Integer;

{
Handle: 传入当前窗口或 Applicaton 的句柄
FileName: 需要传入的文件名
Params: 执行文件所带的参数
StartDir: 执行文件启动路径
InitialState: 窗口显示模式
}

实现代码如下:

实现执行外部程序,并等待程序结束的函数。{ ExecuteFileWait }
实现执行外部程序,并等待程序结束的函数。
实现执行外部程序,并等待程序结束的函数。
function ExecuteFileWait(Handle: HWND; const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
实现执行外部程序,并等待程序结束的函数。
const
实现执行外部程序,并等待程序结束的函数。  ShowCommands: 
array[TExecState] of LongInt = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);
实现执行外部程序,并等待程序结束的函数。
var
实现执行外部程序,并等待程序结束的函数。  Info: TShellExecuteInfo;
实现执行外部程序,并等待程序结束的函数。  ExitCode: DWORD;
实现执行外部程序,并等待程序结束的函数。  FActive: HWND;
实现执行外部程序,并等待程序结束的函数。
begin
实现执行外部程序,并等待程序结束的函数。  FillChar(Info, SizeOf(Info), 
0);
实现执行外部程序,并等待程序结束的函数。  Info.cbSize :
= SizeOf(TShellExecuteInfo);
实现执行外部程序,并等待程序结束的函数。  
with Info do
实现执行外部程序,并等待程序结束的函数。  
begin
实现执行外部程序,并等待程序结束的函数。    fMask :
= SEE_MASK_NOCLOSEPROCESS;
实现执行外部程序,并等待程序结束的函数。    Wnd :
= Application.MainForm.Handle;
实现执行外部程序,并等待程序结束的函数。    lpFile :
= PChar(FileName);
实现执行外部程序,并等待程序结束的函数。    lpParameters :
= PChar(Params);
实现执行外部程序,并等待程序结束的函数。    lpDirectory :
= PChar(StartDir);
实现执行外部程序,并等待程序结束的函数。    nShow :
= ShowCommands[InitialState];
实现执行外部程序,并等待程序结束的函数。  
end;
实现执行外部程序,并等待程序结束的函数。  FActive :
= GetActiveWindow;
实现执行外部程序,并等待程序结束的函数。
实现执行外部程序,并等待程序结束的函数。  
if ShellExecuteEx(@Info) then
实现执行外部程序,并等待程序结束的函数。  
begin
实现执行外部程序,并等待程序结束的函数。    EnableWindow(Handle, False);
实现执行外部程序,并等待程序结束的函数。    
repeat
实现执行外部程序,并等待程序结束的函数。      Application.ProcessMessages;
实现执行外部程序,并等待程序结束的函数。      GetExitCodeProcess(Info.hProcess, ExitCode);
实现执行外部程序,并等待程序结束的函数。    
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
实现执行外部程序,并等待程序结束的函数。    EnableWindow(Handle, True);
实现执行外部程序,并等待程序结束的函数。    ShowWindow(Handle, SW_SHOW);
实现执行外部程序,并等待程序结束的函数。    SetActiveWindow(FActive);
实现执行外部程序,并等待程序结束的函数。    SetForegroundWindow(FActive);
实现执行外部程序,并等待程序结束的函数。    Result :
= ExitCode;
实现执行外部程序,并等待程序结束的函数。  
end
实现执行外部程序,并等待程序结束的函数。  
else Result := -1;
实现执行外部程序,并等待程序结束的函数。
end;  
实现执行外部程序,并等待程序结束的函数。
实现执行外部程序,并等待程序结束的函数。

示范:

实现执行外部程序,并等待程序结束的函数。begin
实现执行外部程序,并等待程序结束的函数。  ExecuteFileWait(Application.Handle
'C:\Windows\NotePad.EXE''C:\A.txt''',  esMaximized);
实现执行外部程序,并等待程序结束的函数。  ShowMessage(
'OK! 程序已退出!');
实现执行外部程序,并等待程序结束的函数。
end;
实现执行外部程序,并等待程序结束的函数。



 

相关文章: