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 内存管理[2-3]

Delphi制作透明窗体

Delphi 安卓 app 动态权限申请

Delphi win7中的uac与开机自动启动

Delphi代码,直截注入别的进程,之后直截运行在别的进程中的代码!

Delphi string 常用字串符处理函数

tstrings 的用法

Delphi 免杀下载者代码

Delphi createmessagedialog

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



打赏

取消

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

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

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

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

评论

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