Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата Shkutu:
Вопрос, можно ли поменять заглавие у стандартной формочки, выдаваемой MsgBox? »
Помимо расширенного MsgBoxEx от китайских собратьев, можно использовать системные MessageBox:
Код: Выделить весь код
[code]
#define A = (Defined UNICODE) ? "W" : "A"

//const
//    MB_ICONINFORMATION = $40;
//    MB_ICONEXCLAMATION = $30;
//    MB_ICONQUESTION = $20;
//    MB_ICONSTOP = $10;
//    MB_ICONNONE = $10;
//    MB_SYSTEMMODAL = $1000;


function MessageBox(AWnd: HWND; mbText, mbCaption: String; mbType: Cardinal): Integer; 
    external 'MessageBox{#A}@user32.dll stdcall';


function InitializeSetup(): Boolean;
begin
    MessageBox(Application.Handle, 'Сообщение', 'Заголовок', MB_OK or $40);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:20, 13-09-2013 | #1111



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 149
Благодарности: 38

Профиль | Отправить PM | Цитировать


nik1967, попробовала поставить инно от Restools, вроде все по инструкции, но скрипт даже не компилится, внезапно ругается на неизвестные данной версии inno сообщения в default.isl.
saurn, спасибо, то, что надо!

Отправлено: 13:33, 13-09-2013 | #1112


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


saurn, Shkutu, до кучи имплементация WinApi функции MessageBoxIndirect
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
входные аргументы по большей части вынес в перечисляемые типы. Так будет проще, чем с флагами
У этого диалогового окна есть возможности настройки, которых нет у встроенных диалоговых окон китайской версии:

читать дальше »
Код: Выделить весь код
#define A = (Defined UNICODE) ? "W" : "A"
const
    MB_ICONHAND = $00000010;
    MB_ICONQUESTION_ = $00000020;
    MB_ICONEXCLAMATION = $00000030;
    MB_ICONASTERISK = $00000040;
    MB_USERICON = $00000080;
    MB_HELP = $00004000;
    MB_CANCELTRYCONTINUE = $00000006;

    MB_DEFBUTTON4 = $00000300;
    
    MB_APPLMODAL = $00000000;
    MB_SYSTEMMODAL = $00001000;
    MB_TASKMODAL = $00002000;
    
    IDTRYAGAIN = 10;
    IDCONTINUE = 11;
    
    


type
    Pointer = Longint;
    
    _HELPINFO = record     { Structure pointed to by lParam of WM_HELP }
        cbSize: UINT;          { Size in bytes of this struct  }
        iContextType: Integer; { Either HELPINFO_WINDOW or HELPINFO_MENUITEM }
        iCtrlId: Integer;      { Control Id or a Menu item Id. }
        hItemHandle: THandle;  { hWnd of control or hMenu.     }
        dwContextId: DWORD_PTR;{ Context Id associated with this item }
        MousePos: TPoint;      { Mouse Position in screen co-ordinates }
    end;
    
    HINST = THandle;

    TPRMsgBoxCallback = Pointer;
    
    _MSGBOXPARAMS = record
        cbSize: UINT;
        hwndOwner: HWND;
        hInstance: HINST;
        lpszText: String;
        lpszCaption: String;
        dwStyle: DWORD;
        lpszIcon: String;
        dwContextHelpId: DWORD_PTR;
        lpfnMsgBoxCallback: TPRMsgBoxCallback;
        dwLanguageId: DWORD;
    end;
    
    
    ////////////////////////////////////////////////////////////////////
    
    
    _MBOX_EX_BTNSET =
    (
        _mb_Abort_Retry_Ignore,
        _mb_Cancel_TryAgain_Continue,
        _mb_Ok,
        _mb_Ok_Cancel,
        _mb_Retry_Cancel,
        _mb_Yes_No,
        _mb_Yes_No_Cancel
    );
    
    _MBOX_EX_BTN =
    (
        _btn_Abort,
        _btn_Retry,
        _btn_Ignore,
        _btn_TryAgain,
        _btn_Continue,
        _btn_Ok,
        _btn_Cancel,
        _btn_Yes,
        _btn_No
    );
    
    
    _MBOX_EX_ICON =
    (
        _ico_Warning,
        _ico_Error,
        _ico_Information,
        _ico_Question
    );
    
    _MBOX_EX_SHOW =
    (
        _mb_Modal_App,
        _mb_Modal_System,
        _mb_Modal_Task
    );
    

function MessageBoxIndirect(const MsgBoxParams: _MSGBOXPARAMS): Integer; external 'MessageBoxIndirect{#A}@user32.dll stdcall';


procedure MessageBoxExDefHelpProc(var lpHelpInfo: _HELPINFO);
begin
    MsgBox('Help', mbInformation, MB_OK);
end;


function MessageBoxEx(
                      const _hwnd: HWND; // хэнл окна - если равен 0 и включена кнопка "справка" сообщение о нажатии кнопки передаётся в каллбэк процедуру  MessageBoxExDefHelpProc; если хэндл не 0, то обрабатывам хелп сообщении WM_HELP окну с хэндлом _hwnd
                      const Message: String; // текст сообщения
                      const Caption: String; // заголовок окна
                      const Buttons: _MBOX_EX_BTNSET; // набор кнопок
                      const FocusButton: _MBOX_EX_BTN; // на какой из кнопок должен быть фокус
                      const AddHelpButton: Boolean; // булев значение, добавление кнопки "Справка"
                      const FocusHelpButton: Boolean; // установить фокус на кнопку "справка". Если True, то значение в FocusButton игнорируется
                      const Icon: _MBOX_EX_ICON; // тип иконки
                      const Modal: _MBOX_EX_SHOW // тип отображения окна
        ): _MBOX_EX_BTN; // возвращает нажатую кнопку
var
    mp: _MSGBOXPARAMS;
    dwFlags: DWORD;
begin
    case Buttons of
        _mb_Abort_Retry_Ignore:
        begin
            dwFlags := MB_ABORTRETRYIGNORE;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
              else
            case FocusButton of
                _btn_Abort: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_Retry: dwFlags := dwFlags or MB_DEFBUTTON2;
                _btn_Ignore: dwFlags := dwFlags or MB_DEFBUTTON3;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
        _mb_Cancel_TryAgain_Continue:
        begin
            dwFlags := MB_CANCELTRYCONTINUE;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
              else
            case FocusButton of
                _btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_TryAgain: dwFlags := dwFlags or MB_DEFBUTTON2;
                _btn_Continue: dwFlags := dwFlags or MB_DEFBUTTON3;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
        _mb_Ok:
        begin
            dwFlags := MB_OK;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON2
        end;
        
        _mb_Ok_Cancel:
        begin
            dwFlags := MB_OKCANCEL;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
              else
            case FocusButton of
                _btn_Ok: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON2;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
        _mb_Retry_Cancel:
        begin
            dwFlags := MB_RETRYCANCEL;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
              else
            case FocusButton of
                _btn_Retry: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON2;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
        _mb_Yes_No:
        begin
            dwFlags := MB_YESNO;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
              else
            case FocusButton of
                _btn_Yes: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_No: dwFlags := dwFlags or MB_DEFBUTTON2;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
        _mb_Yes_No_Cancel:
        begin
            dwFlags := MB_YESNOCANCEL;
            if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
              else
            case FocusButton of
                _btn_Yes: dwFlags := dwFlags or MB_DEFBUTTON1;
                _btn_No: dwFlags := dwFlags or MB_DEFBUTTON2;
                _btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON3;
            else
                dwFlags := dwFlags or MB_DEFBUTTON1;
            end;
        end;
    end;
    
    case Icon of
        _ico_Warning: dwFlags := dwFlags or MB_ICONEXCLAMATION;
        _ico_Error: dwFlags := dwFlags or MB_ICONHAND;
        _ico_Information: dwFlags := dwFlags or MB_ICONASTERISK;
        _ico_Question: dwFlags := dwFlags or MB_ICONQUESTION;
    end;
    
    if _hwnd <> 0 then
    case Modal of
        _mb_Modal_App: dwFlags := dwFlags or MB_APPLMODAL;
        _mb_Modal_System: dwFlags := dwFlags or MB_SYSTEMMODAL;
        _mb_Modal_Task: dwFlags := dwFlags or MB_TASKMODAL;
    end;

    mp.cbSize:= SizeOf(mp);
    mp.hInstance:= hInstance;
    mp.hwndOwner:= _hwnd;
    mp.lpszText:= Message;
    mp.lpszCaption:= Caption;
    
    if AddHelpButton then
    begin
        dwFlags := dwFlags or MB_HELP;
        if _hwnd = 0 then mp.lpfnMsgBoxCallback := CallBackAddr('MessageBoxExDefHelpProc');
    end;

    mp.dwStyle:= dwFlags;

    case MessageBoxIndirect(mp) of
        IDABORT: Result := _btn_Abort;
        IDRETRY: Result := _btn_Retry;
        IDIGNORE: Result := _btn_Ignore;
        IDTRYAGAIN: Result := _btn_TryAgain;
        IDCONTINUE: Result := _btn_Continue;
        IDOK: Result := _btn_Ok;
        IDCANCEL: Result := _btn_Cancel;
        IDYES: Result := _btn_Yes;
        IDNO: Result := _btn_No;
    end;
end;





function NextButtonClick(CurPageID: Integer): Boolean;
begin
    repeat
    until MessageBoxEx(0, 'Test message', 'Test Caption', _mb_Cancel_TryAgain_Continue, _btn_TryAgain, True, False, _ico_Warning, _mb_Modal_Task) <> _btn_TryAgain;
end;

Последний раз редактировалось Johny777, 13-09-2013 в 16:44.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:39, 13-09-2013 | #1113


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата Shkutu:
можно ли поменять заглавие у стандартной формочки, выдаваемой MsgBox? »
Shkutu, Inno названия заголовка и текст сообщения стандартных окон берет из языковых файлов isl, поэтому стоит воспользоваться секцией Messages. Например, меняем заголовок и текст диалового окна при выходе из инсталлятора:
Код: Выделить весь код
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Messages]
ru.ExitSetupTitle=Выход
ru.ExitSetupMessage=Выйти?

Отправлено: 17:29, 13-09-2013 | #1114


Пользователь


Сообщения: 149
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
текст сообщения стандартных окон берет из языковых файлов isl »
El Sanchez, текст сообщения - да. А вот что касается свойства Сaption у формы, выдаваемой MsgBox - я там такого не нашла, собственно, потому и спросила. Хотя может просто недостаточно внимательно искала.

Отправлено: 18:54, 13-09-2013 | #1115


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Shkutu, тю, до меня только сейчас дошло, что вам нужно . Тогда используйте то, что ребята выше насоветовали.

Отправлено: 19:04, 13-09-2013 | #1116


Пользователь


Сообщения: 149
Благодарности: 38

Профиль | Отправить PM | Цитировать


El Sanchez, да, уже)

Отправлено: 19:52, 13-09-2013 | #1117


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


У меня вопрос
как например та же WinApi функция MessageBox(Ex) обрабатывает входные флаги?
вот например мы отправляем туда флаги := MB_ICONINFORMATION or MB_TASKMODAL or MB_CANCELTRYCONTINUE
or складывает эти значения, если не ошибаюсь. Получается новое. А каким макаром теперь из этого числа выдрать те 3 флага назад?
спрашиваю, потому что не понимаю, но хочу понять, тк поняв смогу использовать ( плагиатъ ) тот же подход для своих процедур/функций значительно укоротив при этом их прототипы

и просьба: у кого есть мануал, хорошая книга (посоветуйте пожалуйста), где для самых тупых описана побитавая работа с числами (shr shl xor) или момет мне кто тут всё объяснить?
для меня это темнейший лес и гугл не помогает, я до сих пор эту тему не жую
PS: Подозреваю эта тема имеет прямое отношение к моему пред. вопросу

UPD по первому вопросу понял, но к полному пониманию побитовых операций это не привело
http://teran.karelia.pro/articles/item_4464.html

Последний раз редактировалось Johny777, 16-09-2013 в 02:15.


Отправлено: 22:51, 15-09-2013 | #1118


Пользователь


Сообщения: 80
Благодарности: 3

Профиль | Отправить PM | Цитировать


Приветствую всех.
А где можно подробненько почитать, как создать инсталлятор, который сам обновляется с сети и подгружает свежие файлы?

Отправлено: 12:52, 16-09-2013 | #1119


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата Mat_y:
Приветствую всех.
А где можно подробненько почитать, как создать инсталлятор, который сам обновляется с сети и подгружает свежие файлы? »
В шапке все есть

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 21:40, 16-09-2013 | #1120



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход