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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 22-10-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]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

Старожил


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

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


El Sanchez, я хотел сделать вот так но не чего не вышло с ComboBox

Отправлено: 13:27, 06-05-2016 | #1531



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

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


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

Ветеран


Contributor


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

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


Цитата vint56:
но не чего не вышло с ComboBox »
vint56, либо субклассировать ComboBox и его ListBox и рисовать все, что душе угодно, в их оконных процедурах, либо использовать ComboBoxEx. Пример:
Скрытый текст

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

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

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  WM_USER = $0400;
  WC_COMBOBOXEX =  'ComboBoxEx32';
  WS_CHILD = $40000000;
  WS_VISIBLE = $10000000;
  WS_TABSTOP = $10000;
  CBS_DROPDOWNLIST = $0003;
  CBS_SORT = $0100;   
  ILC_COLOR24 = $0018;
  CBEIF_TEXT = $1;
  CBEIF_IMAGE = $2;
  CBEIF_SELECTEDIMAGE = $4;  
  CBEM_INSERTITEM = (WM_USER + {#ifndef UNICODE}1{#else}11{#endif});
  CBEM_SETIMAGELIST = (WM_USER + 2);   
  CB_SETCURSEL = $014E;

type
  TComboBoxExItem = record
    mask: UINT;
    iItem: INT_PTR;
    pszText: string;
    cchTextMax: Integer;
    iImage: Integer;
    iSelectedImage: Integer;
    iOverlay: Integer;
    iIndent: Integer;
    lParam: Longint;  
  end;

function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external 'ImageList_Create@comctl32.dll stdcall';
function ImageList_Destroy(himl: HIMAGELIST): BOOL; external 'ImageList_Destroy@comctl32.dll stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external 'ImageList_ReplaceIcon@comctl32.dll stdcall';
function SendMessageCBEI(hWnd: HWND; Msg: UINT; wParam: Longint; var lParam: TComboBoxExItem): Longint; external 'SendMessage{#A}@user32.dll stdcall';

var
  GImageList: HIMAGELIST;
  GComboBoxEx: HWND;  

//////////////////////////////////////////////////////////
procedure CreateComboBoxExItem(Text: string; Icon: HICON);
var
  ImageIndex: Integer;  
  CBItem: TComboBoxExItem;
begin
  ImageIndex := ImageList_ReplaceIcon(GImageList, -1, Icon);
  with CBItem do
  begin
    mask := CBEIF_TEXT or CBEIF_IMAGE or CBEIF_SELECTEDIMAGE;
    iItem := -1;
    pszText := Text;
    iImage := ImageIndex;
    iSelectedImage := ImageIndex;  
  end;   
  SendMessageCBEI(GComboBoxEx, CBEM_INSERTITEM, 0, CBItem);
end;

///////////////////////////
procedure CreateComboBoxEx;
begin
  { create comboex }
  GComboBoxEx := CreateWindowEx(0, WC_COMBOBOXEX, '', WS_VISIBLE or WS_CHILD or WS_TABSTOP or CBS_DROPDOWNLIST or CBS_SORT, 0, 0, 320, 320, WizardForm.Handle, 0, HInstance, 0);

  { create imagelist }
  GImageList := ImageList_Create(32, 32, ILC_COLOR24{ use ILC_COLOR32 for 32-bit icons }, 0, 0);  

  { add items }
  CreateComboBoxExItem('Test entry 1', Application.Icon.Handle);  
  CreateComboBoxExItem('Test entry 2', Application.Icon.Handle);   

  { assign imagelist }
  SendMessage(GComboBoxEx, CBEM_SETIMAGELIST, 0, GImageList);   

  { set selected item }  
  SendMessage(GComboBoxEx, CB_SETCURSEL, 0, 0);
end;

////////////////////////////
procedure DestroyComboBoxEx;
begin
  if GImageList <> 0 then  
    ImageList_Destroy(GImageList);
  if GComboBoxEx <> 0 then  
    DestroyWindow(GComboBoxEx);    
end;

///////////////////////////
procedure InitializeWizard;
begin
  WizardForm.OuterNotebook.Hide;  
  CreateComboBoxEx;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
  DestroyComboBoxEx;
end;

Последний раз редактировалось El Sanchez, 25-12-2017 в 11:44. Причина: DeleteObject -> ImageList_Destroy

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

Отправлено: 16:21, 06-05-2016 | #1532


Старожил


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

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


El Sanchez, Большое тебе спасибо за пример

Отправлено: 16:27, 06-05-2016 | #1533


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


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

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


El Sanchez, спасибо. немного дополнил пример.
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=Example
AppVerName=Example 1.0
DefaultDirName={pf}\Example
OutputDir=.

[Files]
Source: Setup1.ico; DestDir: {app}; Check: IsChecked(0);
Source: Setup2.ico; DestDir: {app}; Check: IsChecked(1);

[code ]
#define A = (Defined UNICODE) ? "W" : "A"
const
  WM_USER = $0400;
  WC_COMBOBOXEX =  'ComboBoxEx32';
  WS_CHILD = $40000000;
  WS_VISIBLE = $10000000;
  WS_TABSTOP = $10000;
  CBS_DROPDOWNLIST = $0003;
  CBS_SORT = $0100;
  ILC_COLOR24 = $0018;
  ILC_COLOR32 = $0020;
  CBEIF_TEXT = $1;
  CBEIF_IMAGE = $2;
  CBEIF_SELECTEDIMAGE = $4;
  CBEM_INSERTITEM = (WM_USER + {#ifndef UNICODE}1{#else}11{#endif});
  CBEM_SETIMAGELIST = (WM_USER + 2);
  CB_SETCURSEL = $014E;
  WM_COMMAND = $0111;
  CBN_SELCHANGE = 1;
  CB_GETCURSEL = $0147;
  CB_GETCOUNT = $0146;
  WM_GETTEXT = $D;
  WM_GETTEXTLENGTH = $E;
  CB_GETLBTEXT = $0148;
  CB_GETLBTEXTLEN = $0149;
  //
type
  TComboBoxExItem = record
    mask: UINT;
    iItem: INT_PTR;
    pszText: string;
    cchTextMax: Integer;
    iImage: Integer;
    iSelectedImage: Integer;
    iOverlay: Integer;
    iIndent: Integer;
    lParam: Longint;
  end;

function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';
function DeleteObject(hObject: THandle): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external 'ImageList_Create@comctl32.dll stdcall';
function ImageList_Destroy(ImageList: HImageList): Bool; external 'ImageList_Destroy@comctl32.dll stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external 'ImageList_ReplaceIcon@comctl32.dll stdcall';
function SendMessageCBEI(hWnd: HWND; Msg: UINT; wParam: Longint; var lParam: TComboBoxExItem): Longint; external 'SendMessage{#A}@user32.dll stdcall';

var
  GImageList: HIMAGELIST;
  GComboBoxEx: HWND;
  Icon1: TNewIcon;

function IsChecked(const Index: Integer): Boolean;
begin
  Result:= False;
if GComboBoxEx<>0 then
if SendMessage(GComboBoxEx, CB_GETCURSEL, 0, 0)=Index then
  Result:= True;
end;

//////////////////////////////////////////////////////////
procedure CreateComboBoxExItem(Text, FileName: string);
var
  ImageIndex: Integer;
  CBItem: TComboBoxExItem;
  Icon: TNewIcon;
begin
  Icon:= TNewIcon.Create;
  ExtractTemporaryFile(FileName);
  try
    Icon.LoadFromFile(ExpandConstant('{tmp}\'+FileName));
    ImageIndex := ImageList_ReplaceIcon(GImageList, -1, Icon.Handle);
  finally
    Icon.Free;
  end;
  with CBItem do
  begin
    mask := CBEIF_TEXT or CBEIF_IMAGE or CBEIF_SELECTEDIMAGE;
    iItem := -1;
    pszText := Text;
    iImage := ImageIndex;
    iSelectedImage := ImageIndex;
  end;
  SendMessageCBEI(GComboBoxEx, CBEM_INSERTITEM, 0, CBItem);
end;

///////////////////////////
type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;
var
  OldProc: Longint;

function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

function HiWord(L: DWORD): Word;
begin
  Result := L shr 16;
end;

var
  Text: String;
  nIndex: Integer;

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of WM_COMMAND:
begin
  if (lParam=GComboBoxEx) and (HIWORD(wParam) = CBN_SELCHANGE) then
    begin
       nIndex:= SendMessage(GComboBoxEx, CB_GETCURSEL, 0, 0);
       WizardForm.NextButton.Caption:= IntToStr(nIndex); // Выбранная строка
       WizardForm.CancelButton.Caption:= IntToStr(SendMessage(GComboBoxEx, CB_GETCOUNT, 0, 0)); // Количество строк
       //
       Text:= '';
       SetLength(Text,SendMessage(GComboBoxEx, CB_GETLBTEXTLEN, nIndex, 0));
       SendMessage(GComboBoxEx, CB_GETLBTEXT, nIndex, CastStringToInteger(Text));
    if WizardForm.Caption<>Text then
       WizardForm.Caption:= Text;
    end;
  end;
end;
  Result := CallWindowProc(OldProc, hWnd, Msg, wParam, lParam);
end;

///////////////////////////
procedure CreateComboBoxEx;
begin
  { create comboex }  // высота с учетом раскрытого списка
  GComboBoxEx := CreateWindowEx(0, WC_COMBOBOXEX, '', WS_VISIBLE or WS_CHILD or CBS_DROPDOWNLIST or CBS_SORT, ScaleX(20), ScaleX(340), ScaleX(210), ScaleY(320), WizardForm.Handle, 0, HInstance, 0);

  { create imagelist } // высота в итоге свернутого 32 (учитывается ImageList_Create)
  GImageList := ImageList_Create(32, 32, ILC_COLOR32{ use ILC_COLOR24 for 24-bit icons }, 0, 0);

  { add items }
  CreateComboBoxExItem('Test entry 1', 'Setup1.ico');
  CreateComboBoxExItem('Test entry 2', 'Setup2.ico');

  { assign imagelist }
  SendMessage(GComboBoxEx, CBEM_SETIMAGELIST, 0, GImageList);

  { set selected item }
  SendMessage(GComboBoxEx, CB_SETCURSEL, 0, 0);

  if GComboBoxEx <> 0 then
    OldProc:= SetWindowLong(WizardForm.Handle, -4, CallbackAddr('WindowProc'));
end;

////////////////////////////
procedure DestroyComboBoxEx;
begin
  if GImageList <> 0 then
    ImageList_Destroy(GImageList);
  if GComboBoxEx <> 0 then
    DestroyWindow(GComboBoxEx);
end;

///////////////////////////
procedure InitializeWizard;
begin
//  WizardForm.OuterNotebook.Hide;
  CreateComboBoxEx;
end;

////////////////////////////
procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.Handle, -4, OldProc);
  DestroyComboBoxEx;
end;

Последний раз редактировалось sergey3695, 07-05-2016 в 16:03.

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

Отправлено: 19:00, 06-05-2016 | #1534


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


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

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


Привет. Подскажите, как проверить установлен ли в системе Adobe Flash Player, и если не установлен то предлагаем скачать.


P.S

По поводу Adobe Flash Player поиск дал ответ хотя понятно мало что. Очень хотелось бы увидеть скрипт полностью, для изучения. AlekseyPopovv, вас ожидает корреспонденция, привет.

И если можно, поделитесь дельным примером использования ISCrypt.dll

Скрытый текст


Код: Выделить весь код
[Setup]
AppName=Программа
AppVersion=3
AppPublisher=Программа
DefaultDirName={pf}\Программа
DefaultGroupName=Программа
ShowTasksTreeLines=yes
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
Encryption=Yes
Password=1234567

//// всем файлам, которые используются инсталлятором (библиотеки, фон) надо проставляем флаг noencryption
Source: {app}\МуПрог\*; DestDir: {app}\Программа; Flags: ignoreversion recursesubdirs createallsubdirs noencryption; Components: comp

[Code_]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpPassword then Result:= True;
end;

Вот что удалось получить. Это все? Или при помощи ISCrypt.dll можно серьезно установить более менее серьезную защиту на сам установщик от распаковки используя шифрование.

Последний раз редактировалось dinis.grek, 07-05-2016 в 22:51.


Отправлено: 15:16, 07-05-2016 | #1535


Аватара для habib2302

Ветеран


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

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


sergey3695, dll файлы обычно которые заняты процессом explorer. Например aimp_menu64.dll

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 11:04, 08-05-2016 | #1536


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


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

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


Как удалить папку с файлами где будет устанавливаться программа ?

Папка для установки\SOFT // Нужно удалить папку SOFT не зависимо какая папки установки выбрана

P.S
Желать чтобы она удалялась в конце установки

Отправлено: 20:31, 09-05-2016 | #1537


Аватара для doctor_allcome

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


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

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


Добрый день! Наверное неправильно выразился в вопросе.
Есть папка, в ней находятся подпапки, n-шт. При деинсталляции должны удаляться все подпапки кроме одной, а она должна удаляться (или нет) в зависимости от результата ответа на вопрос ...
Код: Выделить весь код
if MsgBox('Вы хотите удалить сохранения?',mbconfirmation, mb_YesNo) = IDYES then ...
Если ответ ДА - удалять, НЕТ - оставить.

Отправлено: 13:22, 10-05-2016 | #1538


Старожил


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

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


Подскажите пожалуйста, как правильно прописать binary.

Код: Выделить весь код
 Root: HKCU; Subkey: "SOFTWARE\test"; ValueType: binary; ValueName: "LM"; ValueData: "00,00,00,00,94,2f,1e,e7,e6"; Flags: uninsdeletekey
Value data is not a valid value.

Отправлено: 16:35, 10-05-2016 | #1539


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


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

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


Serjione,
Наверное так.
Код: Выделить весь код
 
Root: HKCU; SubKey: Software\Test\SETTINGS; ValueType: binary; ValueName: Size; ValueData: 70 05 00 00; Flags: uninsdeletekeyifempty
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:50, 10-05-2016 | #1540



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

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

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




 
Переход