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


本文整理自网络,侵删。

 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;

相关阅读 >>

Delphi 打开"我的电脑"等特殊文件夹

Delphi开发linux包

Delphi xe tbitmap支持gif,成为具有jpg,gif,bmp,ico,gif五种显示功能的图片控件

Delphi 使用资源文件

Delphi 2009 的反射单元(objauto):

Delphi 判断字符是否是汉字,bytetype字符串中判断是否英文

Delphi 删除文件的函数

Delphi tnethttpclient演示

Delphi中分隔字符串函数的使用

Delphi用ado操作数据库完整示例

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...