Вопрос:

Как настроить Inno Setup, чтобы он отображал MsgBox и автоматически закрывал его через указанное время

inno-setup

3117 просмотра

4 ответа

410 Репутация автора

Как заставить Inno Setup отображать a MsgBoxпосле запуска приложения в конце, когда все файлы извлечены, и заставить MsgBox закрыться, скажем, через 5 секунд.

И это MsgBoxбудет что-то вроде «Starting World of Tanks Client v0.8.10».

Автор: Jyrka98 Источник Размещён: 27.12.2013 08:12

Ответы (4)


2 плюса

65725 Репутация автора

Решение

Следующий скрипт показывает, как запустить приложение, не дожидаясь его завершения, и сразу после запуска приложения отображает окно сообщения в течение 5 секунд. Для этого вам нужно будет использовать nowaitфлаг для [Run]входа в раздел, иметь 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;
Автор: TLama Размещён: 27.12.2013 08:24

0 плюса

3666 Репутация автора

Это невозможно с помощью окна сообщений (функция MsgBox ()), поскольку оно останавливает весь процесс установки и ожидает взаимодействия с пользователем.

Вам нужно создать

а) новое окно, которое будет показано над окном установщика и

б) какой-то таймер, который будет показывать / скрывать это окно после соответствующего времени.

Я думаю, что это может быть проще, написав простой плагин для C ++ / C # / Delphi, чем написав его на чистом языке Pascal (Inno).

Автор: Slappy Размещён: 28.12.2013 09:13

0 плюса

95702 Репутация автора

Если вы хотите более индивидуализированную реализацию, чем позволяет ответMessageBoxTimeout из @ TLama (например, отображение обратного отсчета или заголовки пользовательских кнопок):

Полный код см. В разделе MsgBox - сделать кнопку ОК неактивной и перейдите в обратный отсчет - Inno Setup .

Автор: Martin Prikryl Размещён: 05.11.2017 05:16

0 плюса

21 Репутация автора

Вы можете попробовать использовать всплывающий метод оболочки vbscript. Всплывающее окно должно отображаться в течение 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;

Автор: SystemAdmin Размещён: 04.04.2018 11:13
Вопросы из категории :
32x32