Имя пользователя:
Пароль:
 | Правила  

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

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

Аватара для 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

Аватара для Dodakaedr

Ветеран


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

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


saneksanek, Есть вот такой пример по вашему вопросу:
читать дальше »
Код: Выделить весь код
#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=BassExample
AppVerName=BassExample
DefaultDirName={pf}\BassExample

[Files]
Source: compiler:Dll Pack\BASS.dll;   Flags: dontcopy
Source: compiler:Dll Pack\CallbackCtrl.dll;  Flags: dontcopy
Source: compiler:Dll Pack\botva2.dll;   Flags: dontcopy
Source: BASS_Files\*;   Flags: dontcopy
//Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy

[ code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('voldote.png');
  //ExtractTemporaryFile('Music.mp3');

  //BASS_Init('{tmp}\Music.mp3')  //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Поиск по маске
   
  //Создаем регулятор громкости
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 20, 325)
end;

procedure DeinitializeSetup();
begin
  //BASS_DeInit; //Освобождаем процесс
  gdipShutdown
end;
файлы.rar

-------
Inno Setup 5 Ultra Unicode


Отправлено: 08:42, 23-05-2014 | #751



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

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


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

Ветеран


Contributor


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

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


Цитата Kashtan007:
Как место серых окон (Inner Notebook и Inner Page) на страницах установщика поставить изображение (фон)? »
Способов несколько:
1. Самый распространенный способ - скрыть OuterNotebook, влепить фоновую картинку на форму, сверху создать аналоги скрытых статиков (TNewStaticText -> TLabel), менять родителя остальных контролов (TBitmapImage, TEdit, TNewCheckListBox и т.д.) в нужное время для имитации перехода между страницами.
2. Сабклассинг. Переопределить оконные процедуры WizardForm, страниц OuterNotebook (включая вложенные) на свои и отрисовывать фон самому. В TWizardForm и TNewNotebookPage фон рисуется с помощью системной кисти цвета clBtnFace, которую можно представить как узорчастую кисть цвета clBtnFace размером в 1х1 пикселя. Имея картинку, можно создать узорчастую кисть на ее основе, и рисовать фон ею вместо системной в своей оконной процедуре. В примере создается кисть на основе картинки (я не стал создавать кисть на основе картинки с размерами клиентской части формы, взял WizardSmallBitmapImage, чтобы увидеть воочию как система заливает фон кистью), переопределяются оконные процедуры для TWizardForm и TNewNotebookPage, в оконных процедурах фон рисуется созданной кистью при получении сообщения WM_ERASEBKGND.
читать дальше »

Код: Выделить весь код
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    GWL_USERDATA = (-21);
    GWL_WNDPROC = (-4);
    WM_ERASEBKGND = $0014;
    GA_ROOT = 2;

var
    g_hBackgroundBrush: THandle;
    g_pWndProc, g_pNotebookPageWndProc: Longint;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function CreatePatternBrush(hbmp: HBITMAP): THandle; external 'CreatePatternBrush@gdi32.dll stdcall';
function DeleteObject(hObject: THandle): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function GetUpdateRect(hWnd: HWND; var lpRect: TRect; bErase: BOOL): BOOL; external 'GetUpdateRect@user32.dll stdcall';
function GetAncestor(hwnd: HWND; gaFlags: UINT): HWND; external 'GetAncestor@user32.dll stdcall';
function FillRect(hDC: Longint; const lprc: TRect; hbr: Longint): Integer; external 'FillRect@user32.dll stdcall';
function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints: TPoint; cPoints: UINT): Integer; external 'MapWindowPoints@user32.dll stdcall';
function SetBrushOrgEx(hdc: Longint; nXOrg, nYOrg: Integer; var lppt: TPoint): BOOL; external 'SetBrushOrgEx@gdi32.dll stdcall';

//////////////////////////////////////////////////////////////////////////
function WndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
var
    rc: TRect;
begin
    case Msg of
        WM_ERASEBKGND: begin
            GetUpdateRect(hWnd, rc, False);
            FillRect(wParam, rc, g_hBackgroundBrush);
            Result := 1;
        end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

//////////////////////////////////////////////////////////////////////////////////////
function NotebookPageWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
var
    pt: TPoint;
    rc: TRect;
begin
    case Msg of
        WM_ERASEBKGND: begin
            MapWindowPoints(hWnd, GetAncestor(hWnd, GA_ROOT), pt, 1);
            SetBrushOrgEx(wParam, -pt.x, -pt.y, pt);
            GetUpdateRect(hWnd, rc, False);
            FillRect(wParam, rc, g_hBackgroundBrush);
            Result := 1;
        end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

//////////////////////////////////////////////////////////
procedure SubclassControlProc(const Control: TWinControl);
var
    i: Integer;
begin
    for i := 0 to Control.ControlCount-1 do if Control.Controls[i] is TWinControl then
    begin
        // subclass notebook page
        if Control.Controls[i] is TNewNotebookPage then with TNewNotebookPage(Control.Controls[i]) do
            if GetWindowLong(Handle, GWL_USERDATA) = 0 then
                SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, g_pNotebookPageWndProc));

        if TWinControl(Control.Controls[i]).ControlCount > 0 then
            SubclassControlProc(TWinControl(Control.Controls[i]));
    end;
end;

///////////////////////////////////
procedure SubclassWizardFormProc();
begin
    // callback proc
    if g_pWndProc = 0 then g_pWndProc := CallbackAddr('WndProc');
    if g_pNotebookPageWndProc = 0 then g_pNotebookPageWndProc := CallbackAddr('NotebookPageWndProc');

    // subclass WizardForm
    if GetWindowLong(WizardForm.Handle, GWL_USERDATA) = 0 then
        SetWindowLong(WizardForm.Handle, GWL_USERDATA, SetWindowLong(WizardForm.Handle, GWL_WNDPROC, g_pWndProc));

    // subclass controls
    SubclassControlProc(WizardForm);
end;

////////////////////////////////////////////////////////////
procedure UnSubclassControlProc(const Control: TWinControl);
var
    i: Integer;
begin
    for i := 0 to Control.ControlCount-1 do if Control.Controls[i] is TWinControl then
    begin
        // unsubclass notebook page
        if (Control.Controls[i] is TNewNotebookPage) then with TNewNotebookPage(Control.Controls[i]) do
            if GetWindowLong(Handle, GWL_USERDATA) > 0 then
                SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));

        if TWinControl(Control.Controls[i]).ControlCount > 0 then
            UnSubclassControlProc(TWinControl(Control.Controls[i]));
    end;
end;

/////////////////////////////////////
procedure UnSubclassWizardFormProc();
begin
    // unsubclass controls
    UnSubclassControlProc(WizardForm);

    // unsubclass WizardForm
    if GetWindowLong(WizardForm.Handle, GWL_USERDATA) > 0 then
        SetWindowLong(WizardForm.Handle, GWL_WNDPROC, GetWindowLong(WizardForm.Handle, GWL_USERDATA));
end;

/////////////////////////////
procedure InitializeWizard();
begin
    // create pattern brush
    g_hBackgroundBrush := CreatePatternBrush(WizardForm.WizardSmallBitmapImage.Bitmap.Handle);

    // subclass
    SubclassWizardFormProc();
end;

//////////////////////////////
procedure DeinitializeSetup();
begin
    // unsubclass
    UnSubclassWizardFormProc();

    // delete pattern brush
    if g_hBackgroundBrush <> 0 then DeleteObject(g_hBackgroundBrush);
end;

Цитата Shkutu:
Когда доходит до строчки, где происходит вызов функции, падает с ошибкой "Could not call proc". Похоже на ошибку инициализации, но если смотреть в дебагере, то на этот момент все длл уже извлечены.
Не подскажете, в чем может быть проблема? »
Shkutu, с типами параметров что-то напутали в GetCRMUserGuid. Попробуйте сменить PAnsiChar на String.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:13, 23-05-2014 | #752


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


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

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


El Sanchez, в каком смысле напутала?) Библиотека моя, и в качестве параметров там pchar, который в инно как раз pansichar. А в самой библиотеке (она на fpc) юзать стринги не получается

Отправлено: 12:05, 23-05-2014 | #753


Ветеран


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

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


Shkutu, залейте скрипт с дллками. Гляну.

Отправлено: 12:27, 23-05-2014 | #754


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


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

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


saurn, вот, несколько обрезанный, а то там много было
http://www.ex.ua/290099597218

Отправлено: 14:32, 23-05-2014 | #755


Новый участник


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

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


Shkutu
Код: Выделить весь код
[Files]
...
Source: "mslib.dll"; Flags: dontcopy
Source: "dblib.dll"; Flags: dontcopy
Source: "libiconv.dll"; Flags: dontcopy
;2 последние длл требуются для работы функции из 1й длл, я их просто кладу рядом с 1й 

[Сode]

function GetCRMUserGuid(dbname, host, user, pass:PansiChar):PansiChar; 
 external 'GetCRMUserGuid@{tmp}\mslib.dll stdcall delayload setuponly';

procedure InitializeWizard;
var s: string;
begin
 ExtractTemporaryFile('dblib.dll');
 ExtractTemporaryFile('libiconv.dll');
 ExtractTemporaryFile('mslib.dll');
 s:=GetCRMUserGuid('DB', '127.0.0.1:1433', 'sa', '111');
...
end;

Отправлено: 14:38, 23-05-2014 | #756


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


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

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


Приветствую всех! Уважаемые, подскажите как реализовать задачу:

Вообщем инсталлятор двуязычный: русский/английский (выберается сразу).
Необходимо как-то определить какой язык был выбран и в соответствие с этим выбором дать знать инсталлятору какой из файлов грузить в "InfoBeforeFile"

Код: Выделить весь код
#ifdef InfoBefore
#if {language} = "english"
InfoBeforeFile=InfoB_E.rtf
 #if {language} = "russian"
InfoBeforeFile=InfoB_R.rtf
#endif
что то типо это.. надеюсь вы поняли мою мысль. Помогите разобраться пожалуйста. Заранее спасибо

Отправлено: 14:58, 23-05-2014 | #757


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


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

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


altef_4, вместо files {tmp} указать? Так я уже пробовала, не помогает
Alloc, попробуйте так
Код: Выделить весь код
[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl"; InfobeforeFile: "InfoB_E.rtf"
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"; InfobeforeFile:"InfoB_R.rtf
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:16, 23-05-2014 | #758


Ветеран


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

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


Shkutu, смотрите в сторону библиотеки, что то вы напутали, при ее создании.

Отправлено: 15:44, 23-05-2014 | #759


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

Ветеран


Contributor


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

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


Цитата Shkutu:
Библиотека моя, и в качестве параметров там pchar »
Shkutu, почитайте здесь, пример в конце как раз ваш случай.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:21, 23-05-2014 | #760



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты 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




 
Переход