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

时间:2013-12-27 20:12:03

标签: inno-setup

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

MsgBox会说“开始坦克客户端v0.8.10”。

4 个答案:

答案 0 :(得分:2)

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

原则很简单;处理应用程序的[Run]部分条目时,应用程序启动并且由于nowait标志,该条目将在应用程序启动后立即处理。由于在处理条目时调用AfterInstall触发器函数,我们可以从其指定的函数中显示该消息对话框:

[Files]
Source: "MyProg.exe"; DestDir: "{app}"

[Run]
Filename: "{app}\MyProg.exe"; AfterInstall: ShowStartingMessageBox; Flags: nowait

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif
const
  MB_ICONINFORMATION = $40;

function MessageBoxTimeout(hWnd: HWND; lpText: string; lpCaption: string;
  uType: UINT; wLanguageId: Word; dwMilliseconds: DWORD): Integer;
  external 'MessageBoxTimeout{#AW}@user32.dll stdcall';

procedure ShowStartingMessageBox;
begin
  MessageBoxTimeout(WizardForm.Handle, 'The application is starting... ' +
    'Ok, to be upright; it''s been started, but since its initialization ' +
    'takes a long time, we usually say it''s starting. This message will ' +
    'be automatically closed in 5 seconds!', 'Caption...',
    MB_OK or MB_ICONINFORMATION, 0, 5000);  
end;

答案 1 :(得分:0)

使用Message Box(MsgBox()函数)是不可能的,因为它会停止整个安装过程并等待用户交互。

您需要创建

a)一个新窗口,将显示在安装程序窗口上方

b)某种计时器,它会在适当的时间后显示/隐藏这个窗口。

我认为通过编写简单的C ++ / C#/ Delphi插件比使用纯Pascal(Inno)代码编写它更容易。

答案 2 :(得分:0)

如果您希望实现比@TLama's answer允许的MessageBoxTimeout更自定义的实施(例如倒计时显示或自定义按钮字幕):

有关完整代码,请参阅MsgBox - Make unclickable OK Button and change to countdown - Inno Setup

答案 3 :(得分:0)

您可以尝试使用vbscript的shell弹出方法。 弹出窗口应显示5秒钟......

[Files]
Source: "MyProg.exe"; DestDir: "{app}"

[Run]
Filename: "{app}\MyProg.exe"; AfterInstall: ShowVBScriptPopup; Flags: nowait

[Code]
procedure ShowVBScriptPopup;
var
  sh;
begin
  sh := CreateOleObject('WScript.Shell');
  sh.Popup('Huhu', 5, 'title');
end;