|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
Ветеран Сообщения: 1264 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Отправлено: 08:52, 02-02-2015 |
Старожил Сообщения: 242
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:27, 06-05-2016 | #1531 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1264
|
Профиль | Отправить PM | Цитировать Цитата vint56:
Скрытый текст
[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
|
Профиль | Отправить PM | Цитировать El Sanchez, Большое тебе спасибо за пример
|
Отправлено: 16:27, 06-05-2016 | #1533 |
Пользователь Сообщения: 148
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Ветеран Сообщения: 855
|
Профиль | Отправить PM | Цитировать sergey3695, dll файлы обычно которые заняты процессом explorer. Например aimp_menu64.dll
|
------- Отправлено: 11:04, 08-05-2016 | #1536 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Как удалить папку с файлами где будет устанавливаться программа ?
Папка для установки\SOFT // Нужно удалить папку SOFT не зависимо какая папки установки выбрана P.S Желать чтобы она удалялась в конце установки |
Отправлено: 20:31, 09-05-2016 | #1537 |
Новый участник Сообщения: 32
|
Добрый день! Наверное неправильно выразился в вопросе.
Есть папка, в ней находятся подпапки, n-шт. При деинсталляции должны удаляться все подпапки кроме одной, а она должна удаляться (или нет) в зависимости от результата ответа на вопрос ... Если ответ ДА - удалять, НЕТ - оставить. |
Отправлено: 13:22, 10-05-2016 | #1538 |
Старожил Сообщения: 203
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:35, 10-05-2016 | #1539 |
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:50, 10-05-2016 | #1540 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|