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 实现 托动pagecontrol上的标签页

Delphi windows 编程[19] - 改变菜单项的状态: getmenustate、enablemenuitem

Delphi 获得每个进程的cpu使用率

Delphi edit1.gettextlen 获取编辑框字符数

Delphi winapi: messagebeep - 播放一个系统声音

Delphi xe 如何实现("再按一次退出") 然后退出程序

Delphi extractclassname 字符串处理函数

Delphi 查看内存数据的函数

Delphi版 随机窗口类名

Delphi获取默认浏览器

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



打赏

取消

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

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

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

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

评论

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