如果在提取所有文件后在endm启动应用程序后,如何使Inno安装程序显示MsgBox
,并使MsgBox自行关闭,比如5秒。
MsgBox
会说“开始坦克客户端v0.8.10”。
答案 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;