Inno setup 如何使Inno设置显示MsgBox并在指定时间后自动关闭它

Inno setup 如何使Inno设置显示MsgBox并在指定时间后自动关闭它,inno-setup,Inno Setup,如何使Inno安装程序在提取所有文件时在endm启动应用程序后显示MsgBox,并使MsgBox在5秒内自动关闭 而MsgBox会说类似于“Starting World of Tanks Client v0.8.10”。下面的脚本显示了如何启动应用程序,而无需等待其执行完成,并且在应用程序启动后立即显示消息框5秒钟。为此,您需要使用[Run]部分条目的标志,具有一个函数和一个消息对话框,该对话框能够在一段时间后自动关闭(我使用了中的一个) 原理简单;处理应用程序中的[Run]部分条目时,应用程序

如何使Inno安装程序在提取所有文件时在endm启动应用程序后显示
MsgBox
,并使MsgBox在5秒内自动关闭


MsgBox
会说类似于“Starting World of Tanks Client v0.8.10”。

下面的脚本显示了如何启动应用程序,而无需等待其执行完成,并且在应用程序启动后立即显示消息框5秒钟。为此,您需要使用
[Run]
部分条目的标志,具有一个函数和一个消息对话框,该对话框能够在一段时间后自动关闭(我使用了中的一个)

原理简单;处理应用程序中的
[Run]
部分条目时,应用程序将启动,多亏了标志,该条目在应用程序启动后立即被视为已处理。由于在处理条目时会调用触发器函数,因此我们可以通过其指定的函数显示消息对话框:

[文件]
资料来源:“MyProg.exe”;DestDir:“{app}”
[运行]
文件名:“{app}\MyProg.exe”;安装后:ShowStartingMessageBox;旗帜:诺瓦特
[守则]
#ifdef UNICODE
#定义AW“W”
#否则
#定义“A”
#恩迪夫
常数
MB_Iconninformation=40美元;
函数MessageBoxTimeout(hWnd:hWnd;lpText:string;lpCaption:string;
uType:UINT;wLanguageId:Word;DWM:DWORD):整数;
外部“MessageBoxTimeout{#AW}@user32.dll stdcall”;
程序显示启动消息框;
开始
MessageBoxTimeout(WizardForm.Handle,'应用程序正在启动…'+
“好的,直截了当地说;它已经启动了,但自初始化以来”+
“需要很长时间,我们通常说它开始了。此消息将”+
“将在5秒钟内自动关闭!”,“标题…”,
MB_OK或MB_图标信息,0,5000);
结束;

这在消息框(MsgBox()函数)中是不可能的,因为它会停止整个安装过程并等待用户交互

您需要创建

a) 新窗口将显示在安装程序窗口和

b) 某种计时器,在适当的时间后显示/隐藏此窗口


我认为,编写简单的C++/C#/Delphi插件比编写纯Pascal(Inno)代码更容易实现。

如果您想要一个比允许的
MessageBoxTimeout
更定制的实现(如倒计时显示或自定义按钮标题):

  • 创建自定义消息框。首先,请参阅
  • 用于实现超时/倒计时

有关完整的代码,请参阅。

您可以尝试使用vbscript的shell弹出方法。 弹出窗口应显示5秒钟。。。
[文件]
资料来源:“MyProg.exe”;DestDir:“{app}”
[运行]
文件名:“{app}\MyProg.exe”;安装后:ShowVBScriptPopup;旗帜:诺瓦特
[守则]
程序显示脚本弹出;
变量
sh;
开始
sh:=CreateOleObject('WScript.Shell');
sh.Popup('Huhu',5,'title');

结束你能更具体地说一下“当一个应用程序在最后启动后,当所有文件都被提取出来”吗?在应用程序启动前,用户按下最后一页上的“完成”按钮后,是否要立即显示该消息(如果用户选中了“运行应用程序”复选框)?最好将这个问题概括为“有没有一种方法可以显示一个消息框,它会在指定的时间间隔后自动关闭?”。我有一个(黑客)解决方案,但我不知道你想从哪里称呼它。这是…谢谢@TLama:-),但是当一个应用程序在最后启动时如何制作这个节目?好吧,在哪里称呼它我不知道,因为我问的是“当一个应用程序在最后启动后,当所有文件都被提取”的解释。我会告诉你为什么,这部分“在提取所有文件时结束”我可以理解,例如,
[files]
部分中的所有项目复制到目标的时间,并且您可能希望在处理
[Run]
部分项目之前显示该消息(项目可以是该应用程序)。或者,我理解你的问题的另一种方式是,当用户按下“完成”按钮时,你想显示该消息……但是“提取所有文件时”部分对我来说没有太大意义。如何启动该应用程序?从
[Run]
部分?或者,我们谈论的是用户按下最后一个“完成”按钮关闭向导的时间吗?对我来说,听起来第二种选择是你想要的,但你知道,“在最后”不是一个解释。。。给它更多的时间来寻求帮助。轮到你了;-)