Разработка инсталляторов. Урок 18. Inno Setup: Изменение оформления установщика с использованием скинов.
Добрый вечер всем моим подписчикам и читателям. Сегодня мы рассмотрим вопрос изменения оформления вышего установочного пакета в Innо Setup. В данный момент сушествут достаточно много способов для решения этого вопроса, для начала мы расссмотрим вариант применения скинов с помощью ISSkin.
Данный пакет является бесплатной версией Codejock’s Skin Framework и позволяет добавлять и редактировать кастомные скины в Inno Setup. Скачать программу можно тут. Русификатор для SkinBuilder (заменить файл в папке с программой) можно взять тут.
Программа давно не обновлялась, что не мешает её использовать и по сей день. После установки у вас откроется папка, содержашая демо скрипты и собственно саму программу.
В папке Styles находятся стили в формате .cjstyles, которые уже вполне можно добавлять в установщик. Скины для программы можно поискать также и в сети.
В комплекте всего три темы оформления. Можно запустить программу SkinBuilder для просмотра скина, редактирования, эеспорта и импорта.
Давайте для примера интегрируем в наш проект одну из стандартных тем оформления.
Для этого копируем файлы в папку с проектом из папки ISSkin: Библиотеку ISSkin.dll и файл темы (например, Vista.cjstyles) из папки Styles. Если бы мы использовали Юникод версию Inno Setup, то потребовалось бы копировать ISSkinU.dll вместо ISSkin.dll.
Открываем в Inno Setup наш прошлый проект и переходим в секцию [Files]. Прописываем туда нашу библиотеку ISSkin.dll и файл темы.
Source: "D:\Repack\Program\ISSkin.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "D:\Repack\Program\Vista.cjstyles"; DestDir: {tmp}; Flags: dontcopy
В программе:
Тут используется папка назначения {tmp} (То есть временная) и флаг dontcopy. Он означает, что копировать файл на компьютер пользователя не требуется. Обычно он используется для извлечения файлов, используемых в секции [Code] и извлекающихся с помощью процедуры ExtractTemporaryFile. (Извлечение временных файлов)
Теперь создаём секцию [Code] в конце скрипта. Пишем:
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
То есть импортируем API функции загрузки скина.
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
А тут уже выгрузка
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
Тут уже идёт фукнция ShowWindow Windows API из User32.dll.
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Vista.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Vista.cjstyles'), '');
Result := True;
end;
Добавили функцию инициализации инсталлятора (InitializeSetup()), распаковываем и вызываем загрузку нашего стиля Vista.cjstyles.
procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
Sleep(110);
UnloadSkin();
end;
Выгружаем скин до того, как инсталлятор закроется с помощью функции DeinitializeSetup()
В программе это всё выглядит следующим образом:
После сборки проекта и запуска установщика:
Сравните со стандартным стилем из прошлых уроков:
Так что всё работает.
Существует возможность импорта файла темы для WindowsXP в формате .msstyles. Их полно на сайте deviantart.com и много где ещё.
К примеру, я взял вот эту тему Tiger в стиле MacOS. Скачиваем тему и распаковываем. Открываем программу SkinBuilder из папки ISSkin и выбираем импорт. Указываем путь к файлу с расширением .msstyles из только что скачанного архива.
Как видим, изменения есть. Экспортируем с расширением cjstyles (Я назвал файл Tiger.cjstyles) в папку с проектом установщика или ещё куда.
Меняем в скрипте Vista на Tiger.
После компиляции получаем:
Совсем другое дело.
Одно время активно развивался проект Inno Ultra. Данный проект содержал различные инстурменты для облегчения разработки установочных пакетов на базе Inno Setup. К сожалению, долгое время проект не поддерживается и официальный сайт недоступен. Но его вы можете без труда найти в сети. Кроме собственно инструментов, он содержал и сборник тем оформления. Для удобства я выдернул оттуда папку с темами и выложил его сюда. Что там есть, вы можете узнать на скриншоте ниже.
Другие варианты изменения оформления мы рассмотрим в процессе усовершенствования нашего проекта. Выносить их сюда заранее я не стал. Всем спасибо, на сегодня у меня всё. Как показала практика, писать большие посты смысла никакого нет. Всё равно мало кому это интересно, но в будущем может и будет кому нужно.