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

本文介绍了一个使用Delphi执行外部程序并等待其完成的示例代码。该方法通过ShellExecuteEx函数来启动外部程序,并能指定启动时的状态如最大化、最小化等。
作者: 陆岛工作室



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 ;



 

转载于:https://www.cnblogs.com/iinsnian/archive/2008/06/11/1217075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值