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

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

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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для Ivan_009

Ветеран


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

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


Snoopak96, Респект и большое спасибо все работает...

Отправлено: 11:53, 11-08-2012 | #601



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

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


Аватара для Ivan_009

Ветеран


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

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


Как вставить свою картинку в форму отмены....

Последний раз редактировалось Ivan_009, 25-08-2012 в 14:17.


Отправлено: 14:47, 11-08-2012 | #602


Аватара для Johny777

Ветеран


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

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


Цитата Ivan_009:
Как вставить свою картинку в форму отмены.... »
Ну Вань как и любую другую (приписал пару комментариев)

читать дальше »
Код: Выделить весь код
[Setup]
AppName=Cancel_Demo
AppVerName=Cancel_Demo
DefaultDirName={pf}\Cancel_Demo

// пакуем картинку в экзешник
BitmapResource=CancelPic:C:\Program Files (x86)\Inno Setup 5\WizModernSmallImage.bmp


[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl;
Name: English; MessagesFile: compiler:Languages\English.isl;


[CustomMessages]
Russian.Close=Выход
English.Close=Exit

Russian.Exit_Install=Выйти из инсталлятора?
English.Exit_Install=Exit Installer?

Russian.Exit_Install_2=Отменить установку?
English.Exit_Install_2=Cancel Installation?


[code]
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
var
  MyExit: TSetupForm;

begin
  Confirm := False;

  MyExit := CreateCustomForm();
  with MyExit do
  begin
    Position := poScreenCenter;
    ClientWidth := ScaleX(200);
    ClientHeight := ScaleY(87);
    Caption := ExpandConstant('{cm:Close}');
    Color := clBtnFace;
    DeleteMenu(GetSystemMenu(MyExit.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
    SetClassLong(MyExit.Handle, -26, GetClassLong(MyExit.Handle, -26) or $200); /// блокировка комбинации alt + f4

    with TLabel.Create(nil) do
    begin
      AutoSize := False;
      if WizardForm.CurPageID = wpInstalling then
      begin
        if ActiveLanguage = 'Russian' then SetBounds(ScaleX(37), ScaleY(16), ScaleX(140), ScaleY(30)) else SetBounds(ScaleX(47), ScaleY(16), ScaleX(140), ScaleY(30));
        Caption := ExpandConstant('{cm:Exit_Install_2}');
      end else
      begin
        if ActiveLanguage = 'Russian' then SetBounds(ScaleX(30), ScaleY(16), ScaleX(140), ScaleY(30)) else SetBounds(ScaleX(65), ScaleY(16), ScaleX(140), ScaleY(30));
        Caption := ExpandConstant('{cm:Exit_Install}');
      end;
      Parent := MyExit;
      Font.Size := 9;
    end;
    
    with TBitmapImage.Create(nil) do // картинка не имеет переменной, ведь никаких действий с ней не планируется?
    begin
      Parent := MyExit; /// Родитель - наша форма отмены
      Left := ScaleX(0);
      Top := ScaleY(0);
      AutoSize := True; /// заместо ширины, высоты можно просто указать "авторазмер"
      Bitmap.LoadFromResourceName(HInstance, '_IS_CANCELPIC'); /// грузим картинку
    end;

    with TButton.Create(nil) do
    begin
      Parent := MyExit;
      Caption := ExpandConstant(SetupMessage(msgButtonNo));
      SetBounds(ScaleX(18), ScaleY(47), ScaleX(71), ScaleY(25));
      Cursor := crHand;
      ModalResult:= mrNo;
    end;

    with TButton.Create(nil) do
    begin
      Caption := ExpandConstant(SetupMessage(msgButtonYes));
      Parent := MyExit;
      SetBounds(ScaleX(110), ScaleY(47), ScaleX(71), ScaleY(25));
      Cursor := crHand;
      ModalResult := mrYes;
    end;

    case ShowModal() of

      mrNo : Cancel := False;

      mrYes :
      begin
        case
          WizardForm.CurPageID of
          wpInstalling : Application.Title := ExpandConstant(' ' + SetupMessage(msgButtonCancel) + '...');
        end;
      end;

    end;

    Free;
  end;
end;

Последний раз редактировалось Johny777, 11-08-2012 в 15:18.

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

Отправлено: 15:08, 11-08-2012 | #603


Аватара для Ivan_009

Ветеран


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

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


Почему при использовании ISVideo повтор идет нормально но стоит нажать кнопку Stop и Play так все как только видео доходит доконца и все больше неповторяется в чем может быть проблема вот код.....

Последний раз редактировалось Ivan_009, 25-08-2012 в 14:16.


Отправлено: 23:05, 11-08-2012 | #604


Аватара для Johny777

Ветеран


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

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


Ivan_009,
узнаю своё кодище
улучшил с точки зрения оптимизации

читать дальше »
Код: Выделить весь код
procedure ISVideoInit(Handle: THandle; FileName: PAnsiChar; L,T,W,H: Integer); external 'ISVideoInit@files:ISVideo.dll stdcall';
procedure ISVideoPause(); external 'ISVideoPause@files:ISVideo.dll stdcall';
procedure ISVideoPlay(); external 'ISVideoPlay@files:ISVideo.dll stdcall';
procedure ISVideoStop(); external 'ISVideoStop@files:ISVideo.dll stdcall';
procedure ISVideoRePlay(); external 'ISVideoRePlay@files:ISVideo.dll stdcall';
procedure ISVideoClose(); external 'ISVideoClose@files:ISVideo.dll stdcall';

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';

procedure InitializeWizard2();
begin
  ExtractTemporaryFile('video.avi');
  XVIDInstall;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
  case CurPageID of
    wpInstalling:
    begin
      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) xor $2000000);
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421));
      ISVideoRePlay;
    end;

    wpFinished:
    begin
      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) or $2000000);
      ISVideoClose;
    end;
  end;
end;

procedure Play_Stop_Pause(Sender: TObject);
begin
  case TNewButton(Sender).Tag of
  
    1: ISVideoPause();  /// Pause
    
    2: ISVideoRePlay; // play  /// вот тут и был косяк. вместо  ISVideoPlay(); нужно  ISVideoRePlay; (ISVideo !Re! Play;)
    
    3:         /// Stop
    begin  
      ISVideoClose();
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421));
      ISVideoStop();
    end;
    
  end;
end;


procedure InitializeWizard1();
begin
  with TNewButton.Create(nil) do
  begin
    Caption := 'Pause';
    Parent := WizardForm;
    SetBounds(ScaleX(130),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    Tag := 1;
    OnClick := @Play_Stop_Pause;
  end;

  with TNewButton.Create(nil) do
  begin
    Caption := 'Play';
    Parent := WizardForm;
    SetBounds(ScaleX(190),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    Tag := 2;
    OnClick := @Play_Stop_Pause;
  end;

  with TNewButton.Create(nil) do
  begin
    Caption := 'Stop';
    Parent := WizardForm;
    SetBounds(ScaleX(250),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    Tag := 3;
    OnClick := @Play_Stop_Pause;
  end;
end;

касательно видео я так понял тебе нужна "петля" после нажатия на кнопку Play
исправил (в код посмотри)

и Вань заимей привычку с файлами выкладывать
я сейчас четверть часа искал Isvideo, собирал скрипт, чтоб сделать у себя проигрывание и только потом начал искать ошибку

Последний раз редактировалось Johny777, 12-08-2012 в 01:18.

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

Отправлено: 01:12, 12-08-2012 | #605


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

Ветеран


Contributor


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

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


Цитата Batistas:
El Sanchez, все сделал - та же самая ошибка »
Batistas, скрины приведите во время ошибки: 1) функции ReadDCPlusPlus, 2) процедуры InitializeWizard.

Отправлено: 11:41, 12-08-2012 | #606


Аватара для Ivan_009

Ветеран


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

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


Johny777, а как теперь скрыть данные кнопки и отобразить их на wpInstalling:
Подскажи если не трудно...

Последний раз редактировалось Ivan_009, 12-08-2012 в 13:41.


Отправлено: 13:08, 12-08-2012 | #607


Аватара для Johny777

Ветеран


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

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


Ivan_009,
тогда придётся вернуть переменные
ещё улучшил код
теперь на одну кнопку меньше, тк объединил проигрывание и паузу, а запуск видео и прочее перенёс из переключения страниц в этапы установки
код: (приписал комментарии)
читать дальше »
Код: Выделить весь код
#include "xvid.iss"

[Setup]
AppName=ISVideo
AppVerName=1.5.0
AppPublisher=AVMan
CreateAppDir=no
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: Video.avi; DestDir: {tmp}; Flags: dontcopy;
Source: ISVideo.dll; DestDir: {tmp}; Flags: dontcopy;
Source: xvidcore.dll; DestDir: {tmp};Flags: dontcopy;

Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
Source: {fonts}\*; DestDir: {app}\Files; Flags: external recursesubdirs


[code]
var
  Play_Pause_Button, StopButton: TNewButton;
  Paused: boolean; /// вводим логическую переменную

procedure ISVideoInit(Handle: THandle; FileName: PAnsiChar; L,T,W,H: Integer); external 'ISVideoInit@files:ISVideo.dll stdcall';
procedure ISVideoPause(); external 'ISVideoPause@files:ISVideo.dll stdcall';
procedure ISVideoPlay(); external 'ISVideoPlay@files:ISVideo.dll stdcall';
procedure ISVideoStop(); external 'ISVideoStop@files:ISVideo.dll stdcall';
procedure ISVideoRePlay(); external 'ISVideoRePlay@files:ISVideo.dll stdcall';
procedure ISVideoClose(); external 'ISVideoClose@files:ISVideo.dll stdcall';

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';


procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssInstall:   /// перед устанокой
    begin
      ExtractTemporaryFile('video.avi'); /// извлекаем видео перед установкой. Это лучше чем при запуске инстала, тк скорость запуска возрастёт
      XVIDInstall;

      Play_Pause_Button.Show;  /// делаем кнопки видимыми
      StopButton.Show;

      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) xor $2000000);
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421)); /// инициализируем видео

      ISVideoRePlay;  /// запускаем проигрывание
    end;

    ssPostInstall:  /// после установки
    begin
      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) or $2000000);
      ISVideoClose;  /// закрываем видео

      Play_Pause_Button.Free; /// разрушаем кнопки (или можешь просто прятать PauseButton.Visible := False; или  PauseButton.Hide)
      StopButton.Free;
    end;
  end;
end;

procedure Play_Stop_Pause(Sender: TObject);
begin
  case TNewButton(Sender) of

   // PauseButton:   /// Pause

    Play_Pause_Button:
    begin
      if Paused then /// если в переменной True, то
      begin
        ISVideoRePlay; // play - запускаем видео
        TNewButton(Sender).Caption := 'Pause'; /// меняем текст кнопки (TNewButton(Sender) типэлемента(посыльный), от которог идёт команда) на "паузу"
        Paused := False; /// пишем что сняли с паузы (заметь преременная для удобства переводится как "на паузе")
      end else /// в противном случае, те в переменной значение False
      begin
        ISVideoPause(); /// ставим видео на паузу и меняем текст кнопки
        TNewButton(Sender).Caption := 'Play';
        Paused := True; /// пишем значение
      end;
    end;

    StopButton:         /// Stop
    begin
      ISVideoClose();
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421));
      ISVideoStop();

      Play_Pause_Button.Caption := 'Play';
      Paused := True; /// пишем значение
    end;

  end;
end;


procedure InitializeWizard();
begin
  MsgBox('Чтоб имитировать установку во время установки будут скопированы справки и шрифты', mbInformation, MB_OK);
  WizardForm.Width := ScaleX(700);
  WizardForm.Height := ScaleY(600);

  Paused := False; /// присваиваем начальное значение Caption := 'Pause';

  Play_Pause_Button := TNewButton.Create(nil);
  with Play_Pause_Button do
  begin
    Caption := 'Pause';
    Parent := WizardForm;
    SetBounds(ScaleX(190),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    OnClick := @Play_Stop_Pause;
    Hide; // сразу прячем
  end;

  StopButton := TNewButton.Create(nil);
  with StopButton do
  begin
    Caption := 'Stop';
    Parent := WizardForm;
    SetBounds(ScaleX(250),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    OnClick := @Play_Stop_Pause;
    Hide; // сразу прячем
  end;
end;


наглядный пример со всем необходимым в архиве:
http://sendfile.su/647969
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:25, 12-08-2012 | #608


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


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

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


El Sanchez, самое смешное, что теперь ошибка не вылетает Оо День не трогал и вдруг заработало Оо

Отправлено: 16:10, 12-08-2012 | #609


Аватара для Mafioza

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


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

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


Помогите пожалуйста я делаю инсталл Opera , и как мне сделать так чтобы была флажок 'сделать браузером по умолчанию' и после деинсталяции по умолчанию стал тот который был до opera , заранее спасибо

Отправлено: 18:30, 13-08-2012 | #610



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход