|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме 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 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 '[email protected] stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external '[email protected] stdcall';
function ImageList_Destroy(himl: HIMAGELIST): BOOL; external '[email protected] stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external '[email protected] 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 '[email protected] stdcall';
function DeleteObject(hObject: THandle): BOOL; external '[email protected] stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external '[email protected] stdcall';
function ImageList_Destroy(ImageList: HImageList): Bool; external '[email protected] stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external '[email protected] 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 |
|
Ветеран Сообщения: 862
|
Профиль | Отправить 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 | |
|