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


作者:陆岛工作室



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}

functionExecuteFileWait(Handle:HWND;constFileName,Params,StartDir:string;InitialState:TExecState):Integer;
const
ShowCommands:
array[TExecState]ofLongInt=(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);
withInfodo
begin
fMask:
=SEE_MASK_NOCLOSEPROCESS;
Wnd:
=Application.MainForm.Handle;
lpFile:
=PChar(FileName);
lpParameters:
=PChar(Params);
lpDirectory:
=PChar(StartDir);
nShow:
=ShowCommands[InitialState];
end;
FActive:
=GetActiveWindow;

ifShellExecuteEx(@Info)then
begin
EnableWindow(Handle,False);
repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess,ExitCode);
until(ExitCode<>STILL_ACTIVE)orApplication.Terminated;
EnableWindow(Handle,True);
ShowWindow(Handle,SW_SHOW);
SetActiveWindow(FActive);
SetForegroundWindow(FActive);
Result:
=ExitCode;
end
elseResult:=-1;
end;

示范:

begin
ExecuteFileWait(Application.Handle
,'C:\Windows\NotePad.EXE','C:\A.txt','',esMaximized);
ShowMessage(
'OK!程序已退出!');
end;



优质内容筛选与推荐>>
1、雷林鹏分享:MySQL 函数
2、将行政区域导入SQL SERVER
3、【项目总结】之——JS分割字符串
4、JAVA 这一篇--Verbose
5、Vue+elementUI build打包后字体图标丢失问题


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn