Inno Setup

Про софт и железки.
Сообщение
Автор
Аватара пользователя
Ethan Cole
CSmania Linux Group
CSmania Linux Group
Сообщения: 161
Зарегистрирован: 28.09.2006
Откуда: г.Егорьевск МО
Благодарил (а): 6 раз
Поблагодарили: 57 раз
Контактная информация:

#61 Сообщение 03.01.2009, 00:16

Держи.
Русская справка по Inno
http://rl-team.ru/1210634
И глянь сюда
http://forum.ru-board.com/topic.cgi?for ... start=20#1

Аватара пользователя
Klask
Нович0к
Нович0к
Сообщения: 21
Зарегистрирован: 08.04.2008
Откуда: Mars
Контактная информация:

#62 Сообщение 15.02.2009, 23:13

Я так и не понял как прикручивать не файлы, а Директории.
Помогите плз, я запутался :%)
Апатамушта!

Nikk1488
VIP
VIP
Сообщения: 2492
Зарегистрирован: 01.01.2008
Поблагодарили: 4 раза
Контактная информация:

#63 Сообщение 16.02.2009, 13:37

В справке все прекрасно написано..
Ethan Cole писал(а):http://rl-team.ru/1210634
Если так трудно можешь сначала юзать универсальный шел для inno - ISTool... можно без особых знаний сотворить инсталлюшку..
[txtspoil]Adiost и я - гей шлюхи!!![/txtspoil]

Аватара пользователя
RoObot
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 06.08.2008
Контактная информация:

#64 Сообщение 29.05.2009, 19:40

Может уже писалось, но вот хочу спросить в чем сделан инсталлер L4D, если в IShield'е то где там функция проигрывания музыки во время установки?

Nikk1488
VIP
VIP
Сообщения: 2492
Зарегистрирован: 01.01.2008
Поблагодарили: 4 раза
Контактная информация:

#65 Сообщение 29.05.2009, 19:47

В Inno Setup естественно, prankster
Музыка проигрывается через известную библиотеку bass.dll.
[txtspoil]Adiost и я - гей шлюхи!!![/txtspoil]

Аватара пользователя
argnist
VIP
VIP
Сообщения: 1083
Зарегистрирован: 21.05.2006
Откуда: Украина, Днепропетровск
Поблагодарили: 1 раз

#66 Сообщение 29.05.2009, 22:05

пример скрипта смотреть в мануале от Kindly на ру-борде

Аватара пользователя
NecElectro
Нович0к
Нович0к
Сообщения: 18
Зарегистрирован: 09.05.2008
Откуда: RF
Поблагодарили: 1 раз
Контактная информация:

#67 Сообщение 01.06.2009, 01:00

Кто может подсказать как решить пару проблем с Inno Setup

1. Не могу поменять иконку uninstall.exe (она, почему то берётся от файла игры, то есть от главного файла... как её изменить на другую которую я хочу вставить)



2. Текст в Лицензионном соглашении (окошко) и Описании, почему то не как в RTF... С чем это может связано


3. Как сделать, чтобы на фоновом рисунке были вот такие надписи с таким же шрифтом


4. При завершении установщика программы там есть запустит игру и т.д. и в конце есть зайти на сайт... галочку ставлю, но пишет вот такую хрень хотя на самом деле URL находится в папке с игрой... Скрипт создавался с помощью GameScript Generator for Inno Setup... Версия Inno Setup v5.2.0 Rus

Добавлено спустя 2 минуты 28 секунд:
Если кто шарит напишите примеры... 8)
Изображение

Аватара пользователя
[-Dio-]
Сержант
Сержант
Сообщения: 73
Зарегистрирован: 12.05.2009
Откуда: От туда...
Контактная информация:

#68 Сообщение 12.06.2009, 22:30

Вообщем захотел я создать свой инсталл но-стим тф2. Пробовал разные программы. Остановился на Inno Setup. Захотелось и фон какойнить и музычку во время установки и скин красивый. Но нигде готового скрипта не нашел. Пришлось собирать по крупицам. Вот моё творение. Вылаживаю для тех кто слабо сечет в программировании, а так же только начал общаться с Inno Setup.
Скрин
Изображение
Изображение
Скрипт
;Это отделение отвечает за настройки самого компилятора.
[Setup]
;Уникальный айдишник нашего инстала. Генерится в меню.
AppId={{8F56E577-E756-4B81-B4CE-538DC13A1956}
;Название нашего инстала
AppName=Team Fortress 2
;Название вместе с версией
AppVerName=Team Fortress 2 - v1.0.5.8 (3847)
;Кто создал инсталл
AppPublisher=[-Dio-]
;Папка установки по умолчания, у меня тут идет проверка на ключь в реестре,
;если уже есть установленная игра то путь будет в ту же папку иначе в Програм файлсТФ2
DefaultDirName={reg:HKLMSOFTWAREValveSteam,TF2Path|{pf}Team Fortress 2}
;Название группы в меню Пуск
DefaultGroupName=Team Fortress 2
;Если тру значит можно отключить создание группы в меню Пуск
AllowNoIcons=true
;Папка куда попадет наш откомпилированный инстальник
OutputDir=C:Setup
;Название самого файла инстальника
OutputBaseFilename=setup
;Значек инстальника
SetupIconFile=C:Program FilesSmart Install MakerIconsInstallInstall-2.ico
;Картинка слева на странице приветствия
WizardImageFile=E:[Shit]HL InstallIconslogo.bmp
;Маленькая картинка в правом верхнем углу
WizardSmallImageFile=E:[Shit]HL InstallIconsicon.bmp
;Уровень сжатия
Compression=lzma/max
;Эта переменная отвечает за тип сжатия (Сжимать все файлы как один или каждый по отдельности)
SolidCompression=true
;Разбивать ли инстальник на части
DiskSpanning=true
;Размер одной части
DiskSliceSize=860000000
;Папка с анинсталом
UninstallFilesDir={app}Uninstall
;Описание инсталятора
VersionInfoDescription=Team Fortress 2 от [-Dio-]
;Версия в текстовом виде
VersionInfoTextVersion=1.0.5.8 (3847)
;Название
VersionInfoProductName=Team Fortress 2
;Версия в цифровом виде
VersionInfoVersion=1.0.5.8
;Будет ли требовать привелегии инсталл, я убрал - пусть и гости порадуются
PrivilegesRequired=none
;Использовать ли предыдущюю папку установки? Зачем ведь у меня берется значение из реестра.
UsePreviousAppDir=false
;Показывать ли предупреждение если папка уже существует?
DirExistsWarning=no

;================== Надписи ===================
[Messages]
;Надпись которая будет на разделительной линии
BeveledLabel=Team Fortress 2 от [-Dio-]

;============= Языки ================
[Languages]
Name: russian; MessagesFile: compiler:LanguagesRussian.isl

;============ Вопросы ==============
[Tasks]
;Добавить ли ярлык на рабочий стол?
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

;============= Компоненты установки ===================
[Components]
Name: rus; Description: Русская версия; Types: rus
Name: eng; Description: Английская версия; Types: eng

;Вообщем это тип установки, какие компоненты будут установлены...

[Types]
Name: rus; Description: На русском языке
Name: eng; Description: На английском языке
;=====================================================

;=========== Файлы ===============
[Files]
;Библиотека для воспроизведения музыки
Source: S:[Games]TF2BASS.dll; DestDir: {tmp}; Flags: dontcopy
;Музыка
Source: S:[Games]TF2gamestartup.mp3; DestDir: {tmp}; Flags: dontcopy
;Задняя картинка
Source: S:[Games]TF2back.bmp; DestDir: {tmp}; Flags: dontcopy
;Библиотека скина
Source: E:[Installs]SoftInno SetupScriptsSkinISSkin.dll; DestDir: {tmp}; Flags: dontcopy
;Сам скин
Source: E:[Installs]SoftInno SetupScriptsSkinhl2.cjstyles; DestDir: {tmp}; Flags: dontcopy

;Файлы игры
Source: S:[Games]TF2Source 2007 Binaries*; DestDir: {app}; Flags: recursesubdirs ignoreversion
;Файлы разных компонентов
Components: rus; Source: S:[Games]TF2Rus*; DestDir: {app}; Flags: recursesubdirs ignoreversion

;============ Ярлыки ==============
[Icons]
Name: {group}Запустить Team Fortress 2; Filename: {app}tf2.exe; WorkingDir: {app}
Name: {group}Удалить Team Fortress 2; Filename: {uninstallexe}
Name: {commondesktop}Team Fortress 2; Filename: {app}tf2.exe; Tasks: desktopicon; WorkingDir: {app}

;=============== Запуск ===========
[Run]
;Добавляем вопросик об запуске игры после установки
Filename: {app}tf2.exe; Description: {cm:LaunchProgram,Team Fortress 2}; Flags: nowait postinstall skipifsilent

;================ Реестр ===============
[Registry]
;Куда установлена игры
Root: HKLM; Subkey: SOFTWAREValveSteam; ValueType: string; ValueName: TF2Path; ValueData: {app}; Flags: uninsdeletevalue
;Версия игры
Root: HKLM; Subkey: SOFTWAREValveSteam; ValueType: dword; ValueName: TF2Version; ValueData: 10583847; Languages: ; Flags: uninsdeletevalue

;=================== Ини файлы ================
[INI]
;Язык игры изменим в ревему
Filename: {app}Rev.ini; Section: Emulator; Key: Language; String: Russian; Components: rus
Filename: {app}Rev.ini; Section: Emulator; Key: Language; String: English; Components: eng
;А так же имя игрока
Filename: {app}Rev.ini; Section: Emulator; Key: SteamUser; String: {code:GetUser|Name}
Filename: {app}Rev.ini; Section: SteamClient; Key: PlayerName; String: {code:GetUser|Name}

;=============== Удаление ===================
[UninstallDelete]
;Удалим все что есть в папке с игрой
Name: {app}*; Type: filesandordirs

Код: Выделить всё

type
  HSTREAM = DWORD;      //тип звукового потока

// ================= Процедуры работы со свуком =====================
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_SetVolume(volume: DWORD): BOOL;
external 'BASS_SetVolume@files:BASS.dll stdcall delayload';

function BASS_GetVolume: Integer;
external 'BASS_GetVolume@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function GetSystemMetrics(nIndex:Integer):Integer;
external '[email protected] stdcall';

// Процедуры работы со скинами
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Процедуры Вин-апи
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external '[email protected] stdcall';

const
 BASS_SAMPLE_LOOP = 4;   //повторение

var
  UserPage: TInputQueryWizardPage;
  MusicButton, VolumeUP, VolumeDown : TButton;
  VolumeInd: TNewProgressBar;

// Событие при нажатии на кнопку вкл.выкл. музыки
procedure MusicButtonOnClick(Sender: TObject);
begin
//Проверка состояния кнопки
 if MusicButton.Caption = 'II' then // Если играет
  begin
   MusicButton.Caption := '>';
   BASS_Pause;                      // Тушим
  end else                          // Иначе
  begin
   MusicButton.Caption := 'II';
   BASS_Start();                    // Слушаем
  end;
end;

// Нажатие на кнопочку увеличения громкости
procedure VolumeUPOnClick(Sender: TObject);
var
 vol : integer;
begin
 vol := BASS_GetVolume;
 if vol+5 >= 100 then  // Добавляем громкости сразу на 5 единиц
  begin
   BASS_SETVolume(100);
   VolumeIND.position := 100;
   VolumeUP.Enabled := False;  // Если громкость максимальная то выключим кнопку
  end else
  begin
   BASS_SETVolume(vol+5);
   VolumeIND.position := vol+5;
   VolumeDOWN.Enabled := True;
  end;
end;

// Конопка понижение громкости
procedure VolumeDOWNOnClick(Sender: TObject);
var
 vol : integer;
begin
 vol := BASS_GetVolume;
 if vol-5 <= 0 then
  begin
   BASS_SETVolume(0);
   VolumeIND.position := 0;
   VolumeDOWN.Enabled := False; //Если понижать уже некуда то выключаем кнопочку
  end else
  begin
   BASS_SETVolume(vol-5);
   VolumeIND.position := vol-5;
   VolumeUP.Enabled := True;
  end;
end;

//Иницализация окна установки
procedure InitializeWizard;
var
 BackgroundBitmapImage: TBitmapImage;
 s, Name: string;
 i : Integer;
begin

//Тут у нас сделано все что бы окошко с картинкой появлялось сразу с картинкой,
// Дело в том что в ИС есть проблема что сначала появляется окно с градиентом потом только налаживается картинка
 MainForm.Width:=GetSystemMetrics(0);
 MainForm.Height:=GetSystemMetrics(0);
 MainForm.Left:=0;
 MainForm.Top:=0;

// Загружаем сам задник
 ExtractTemporaryFile('back.bmp');
 s:=ExpandConstant('{tmp}')+'back.bmp';
 BackgroundBitmapImage := TBitmapImage.Create(MainForm);
 BackgroundBitmapImage.Bitmap.LoadFromFile(s);
 BackgroundBitmapImage.Align := alClient;
 BackgroundBitmapImage.Parent := MainForm;
 BackgroundBitmapImage.Stretch:=True;

// Показываем главное окно с уже готовым задником
 ShowWindow(MainForm.Handle, SW_SHOWMAXIMIZED);

// Загружаем музыку
   ExtractTemporaryFile('BASS.dll');
     ExtractTemporaryFile('gamestartup.mp3');
      if BASS_Init(-1, 44100, 0, 0, 0) then
        begin
         BASS_Start();
          Name:=ExpandConstant('{tmp}gamestartup.mp3');
         i:=BASS_StreamCreateFile(FALSE, PChar(Name), 0, 0, 4);
        if i <> 0 then
       begin
     BASS_ChannelPlay(i, True);
   end;
  end;

// Добавляем кнопочки управления музыкой
// Вкл. Выкл.
  MusicButton := TButton.Create(WizardForm);
   with MusicButton do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := 'II';
     Hint := 'Вкл.Выкл. музыку';
     ShowHint := True;
     OnClick := @MusicButtonOnClick;
     Parent := WizardForm;
    end;

//Громче
   VolumeDown := TButton.Create(WizardForm);
   with VolumeDown do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := '-';
     Hint := 'Убавить громкость';
     ShowHint := True;
     OnClick := @VolumeDOWNOnClick;
     Parent := WizardForm;
    end;

//Тише
   VolumeUP := TButton.Create(WizardForm);
   with VolumeUP do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width + VolumeDown.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := '+';
     Hint := 'Прибавить громкость';
     ShowHint := True;
     OnClick := @VolumeUPOnClick;
     Parent := WizardForm;
    end;

//Индикатор уровня громкости
  VolumeIND := TNewProgressBar.Create(WizardForm);
   with VolumeIND do
    begin
     Parent := WizardForm;
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width  + VolumeUP.Width  + VolumeDown.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Width;
     Height := WizardForm.CancelButton.Height;
     Min := 0;
     Max := 100;
     Position := BASS_GetVolume;
    end;

//Проверка на то какая громкость стоит в системе
  if BASS_GetVolume >= 100 then volumeUP.Enabled := False;
  if BASS_GetVolume <= 0 then volumeDOWN.Enabled := False;

//Добавляем вопрос о нике игрока
  UserPage := CreateInputQueryPage(wpWelcome,
    'Информация о игроке', 'Пожалуйста укажите информацию и нажмите Далее > ?',
    'Кто ты?');
  UserPage.Add('Ник:', False);
  UserPage.Values[0] := GetPreviousData('Ник:', 'Player');

end;

function InitializeSetup(): Boolean;
begin
//Загружаем скин
    ExtractTemporaryFile('hl2.cjstyles');
	LoadSkin(ExpandConstant('{tmp}hl2.cjstyles'), '');
	Result := True;
end;

procedure DeinitializeSetup();
begin
    BASS_Stop(); //нужно для остановки проигрывания
    BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом

// Скрываем окно до того как выгрузится скин, что бы не промелькнуло окно без скина
	ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
	UnloadSkin();
end;

function GetUser(Param: String): String;
begin
  { Could also be split into separate GetUserName and GetUserCompany functions }
  if Param = 'Name' then
    Result := UserPage.Values[0]
end;

// Процедура дописывает строку с ником в файл конфигурации в папке с игрой
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
 begin
  SaveStringToFile(ExpandConstant('{app}')+'tfcfgconfig.cfg', 'Name "'+GetUser('Name')+'"', True);
 end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
  MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  S: String;
begin
  { Тут у нас выводится разная информация установки }
  S := '';
  S := S + 'Информация о игроке:' + NewLine;
  S := S + Space + UserPage.Values[0] + NewLine;
  S := S + NewLine;
  S := S + MemoDirInfo + NewLine;
  S := S + NewLine;
  S := S + MemoComponentsInfo + NewLine;
  S := S + NewLine;
  S := S + MemoGroupInfo + NewLine;
  S := S + NewLine;
  S := S + MemoTasksInfo;

  Result := S;
end;[/spoiler]

Сильно тока не пинайте, если что то не верно, инно сетаплюсь только пару дней...

[quote="NecElectro"]Не могу поменять иконку uninstall.exe (она, почему то берётся от файла игры, то есть от главного файла... как её изменить на другую которую я хочу вставить)[/quote]
[Setup]
UninstallDisplayIcon=E:\[Installs]\Soft\Icons\Vista Icon Pack v3.0\api.ico
[quote="NecElectro"]Как сделать, чтобы на фоновом рисунке были вот такие надписи с таким же шрифтом[/quote]
Напиши на картинке :) Или попробуй создать лэйблу на мэйн форме
Label1 := TLabel.Create(MainForm);
with Label1 do
begin
  Parent := MainForm;
  Caption := 'L4D';
  Left := ScaleX(8);
  Top := ScaleY(8);
  Width := ScaleX(94);
  Height := ScaleY(40);
  Font.Color := -16777208;
  Font.Height := ScaleY(40);
  Font.Name := 'Tahoma';
end;
Изображение

Аватара пользователя
argnist
VIP
VIP
Сообщения: 1083
Зарегистрирован: 21.05.2006
Откуда: Украина, Днепропетровск
Поблагодарили: 1 раз

#69 Сообщение 13.06.2009, 00:33

[-Dio-]
спасибо! отремонтирую систему - сразу опробую скрипт....
импе, стоит взят ьна заметку толкового скриптера...

Аватара пользователя
[-Dio-]
Сержант
Сержант
Сообщения: 73
Зарегистрирован: 12.05.2009
Откуда: От туда...
Контактная информация:

#70 Сообщение 13.06.2009, 09:45

Вот скрипт для патча.
[spoiler=""Патч""][Setup]
AppName=Team Fortress 2 Патч
AppPublisher=[-Dio-]
AppVerName=Team Fortress 2 v1.0.5.9 (3862) Патч
VersionInfoVersion=1.0.5.9
DefaultGroupName=Team Fortress 2
OutputDir=C:SetupPatch
OutputBaseFilename=setup
DefaultDirName={reg:HKLMSOFTWAREValveSteam,TF2Path|{pf}Team Fortress 2}
SetupIconFile=C:Program FilesSmart Install MakerIconsInstallInstall-2.ico
WizardImageFile=E:[Shit]HL InstallIconslogo.bmp
WizardSmallImageFile=E:[Shit]HL InstallIconsicon.bmp
Compression=lzma/ultra
SolidCompression=true
Uninstallable=false
DirExistsWarning=no
VersionInfoDescription=Team Fortress 2 v1.0.5.9 (3862) Патч
VersionInfoTextVersion=1.0.5.8 (3847)
VersionInfoProductName=Team Fortress 2
PrivilegesRequired=none
UsePreviousAppDir=false

[Messages]
BeveledLabel=Специально для сборки Team Fortress 2 от [-Dio-]

[Languages]
Name: russian; MessagesFile: compiler:LanguagesRussian.isl

[Files]
Source: S:[Games]TF2BASS.dll; DestDir: {tmp}; Flags: dontcopy
Source: S:[Games]TF2gamestartup.mp3; DestDir: {tmp}; Flags: dontcopy
Source: S:[Games]TF2ack.bmp; DestDir: {tmp}; Flags: dontcopy
Source: E:[Installs]SoftInno SetupScriptsSkinISSkin.dll; DestDir: {tmp}; Flags: dontcopy
Source: E:[Installs]SoftInno SetupScriptsSkinhl2.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: C:Program FilesInno Setup Scripting v5.0AddonsLibrariesISTask.dll; DestDir: {tmp}; Flags: dontcopy

Source: S:[Games]TF2patch1.0.5.8 (3847) - 1.0.5.9 (3862)*; DestDir: {app}; Flags: recursesubdirs

[Registry]
Root: HKLM; Subkey: SOFTWAREValveSteam; ValueType: string; ValueName: TF2Path; ValueData: {app};
Root: HKLM; Subkey: SOFTWAREValveSteam; ValueType: dword; ValueName: TF2Version; ValueData: 10593862;

Код: Выделить всё

type
  HSTREAM = DWORD;      //тип звукового потока

// ================= Процедуры работы со свуком =====================
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_SetVolume(volume: DWORD): BOOL;
external 'BASS_SetVolume@files:BASS.dll stdcall delayload';

function BASS_GetVolume: Integer;
external 'BASS_GetVolume@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function GetSystemMetrics(nIndex:Integer):Integer;
external '[email protected] stdcall';

// Процедуры работы со скинами
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Процедуры Вин-апи
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external '[email protected] stdcall';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

const
 BASS_SAMPLE_LOOP = 4;   //повторение

 var
  MusicButton, VolumeUP, VolumeDown : TButton;
  VolumeInd: TNewProgressBar;

 //Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения, выключил, ибо пока не надо, но может пригодится

//function NextButtonClick(CurPage: Integer): Boolean;
//var
//  sz:Integer;
//  s:string;
//begin
//  Result:=True;
// If CurPage=6 then
//  begin
// If (FileSearch('hl2.exe', ExpandConstant('{app}'))='') or (FileSearch('tf2.exe', ExpandConstant('{app}'))='')
//then
//  begin
//  s:='В папке '+ExpandConstant('{app}')+'' #13 'необходимые файлы не обнаружены.' #13#13 'Возможно патч уже установлен или версия игры не подходит.' #13#13 'Продолжить установку в эту папку?';
//  if MsgBox(s, mbInformation, mb_YesNo) = idYes
//   then
//    Result:= True
//   else
//    Result:= False
//  end else begin
//   DeleteFile('{app}hl2.exe');   {   разные плохие или хорошие   }
//   DeleteFile('{app}	f2.exe');   {                действия                }
//  end;
//end;
//end;

//**************************************************//

// Событие при нажатии на кнопку вкл.выкл. музыки
procedure MusicButtonOnClick(Sender: TObject);
begin
//Проверка состояния кнопки
 if MusicButton.Caption = 'II' then // Если играет
  begin
   MusicButton.Caption := '>';
   BASS_Pause;                      // Тушим
  end else                          // Иначе
  begin
   MusicButton.Caption := 'II';
   BASS_Start();                    // Слушаем
  end;
end;

// Нажатие на кнопочку увеличения громкости
procedure VolumeUPOnClick(Sender: TObject);
var
 vol : integer;
begin
 vol := BASS_GetVolume;
 if vol+5 >= 100 then  // Добавляем громкости сразу на 5 единиц
  begin
   BASS_SETVolume(100);
   VolumeIND.position := 100;
   VolumeUP.Enabled := False;  // Если громкость максимальная то выключим кнопку
  end else
  begin
   BASS_SETVolume(vol+5);
   VolumeIND.position := vol+5;
   VolumeDOWN.Enabled := True;
  end;
end;

// Конопка понижение громкости
procedure VolumeDOWNOnClick(Sender: TObject);
var
 vol : integer;
begin
 vol := BASS_GetVolume;
 if vol-5 <= 0 then
  begin
   BASS_SETVolume(0);
   VolumeIND.position := 0;
   VolumeDOWN.Enabled := False; //Если понижать уже некуда то выключаем кнопочку
  end else
  begin
   BASS_SETVolume(vol-5);
   VolumeIND.position := vol-5;
   VolumeUP.Enabled := True;
  end;
end;

//Иницализация окна установки
procedure InitializeWizard;
var
 BackgroundBitmapImage: TBitmapImage;
 s, Name: string;
 i : Integer;
begin

//Тут у нас сделано все что бы окошко с картинкой появлялось сразу с картинкой,
// Дело в том что в ИС есть проблема что сначала появляется окно с градиентом потом только налаживается картинка
 MainForm.Width:=GetSystemMetrics(0);
 MainForm.Height:=GetSystemMetrics(0);
 MainForm.Left:=0;
 MainForm.Top:=0;

// Загружаем сам задник
 ExtractTemporaryFile('back.bmp');
 s:=ExpandConstant('{tmp}')+'ack.bmp';
 BackgroundBitmapImage := TBitmapImage.Create(MainForm);
 BackgroundBitmapImage.Bitmap.LoadFromFile(s);
 BackgroundBitmapImage.Align := alClient;
 BackgroundBitmapImage.Parent := MainForm;
 BackgroundBitmapImage.Stretch:=True;

// Показываем главное окно с уже готовым задником
 ShowWindow(MainForm.Handle, SW_SHOWMAXIMIZED);

// Загружаем музыку
   ExtractTemporaryFile('BASS.dll');
     ExtractTemporaryFile('gamestartup.mp3');
      if BASS_Init(-1, 44100, 0, 0, 0) then
        begin
         BASS_Start();
          Name:=ExpandConstant('{tmp}gamestartup.mp3');
         i:=BASS_StreamCreateFile(FALSE, PChar(Name), 0, 0, 4);
        if i <> 0 then
       begin
     BASS_ChannelPlay(i, True);
   end;
  end;

// Добавляем кнопочки управления музыкой
// Вкл. Выкл.
  MusicButton := TButton.Create(WizardForm);
   with MusicButton do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := 'II';
     Hint := 'Вкл.Выкл. музыку';
     ShowHint := True;
     OnClick := @MusicButtonOnClick;
     Parent := WizardForm;
    end;

//Громче
   VolumeDown := TButton.Create(WizardForm);
   with VolumeDown do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := '-';
     Hint := 'Убавить громкость';
     ShowHint := True;
     OnClick := @VolumeDOWNOnClick;
     Parent := WizardForm;
    end;

//Тише
   VolumeUP := TButton.Create(WizardForm);
   with VolumeUP do
    begin
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width + VolumeDown.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Height;
     Height := WizardForm.CancelButton.Height;
     Caption := '+';
     Hint := 'Прибавить громкость';
     ShowHint := True;
     OnClick := @VolumeUPOnClick;
     Parent := WizardForm;
    end;

//Индикатор уровня громкости
  VolumeIND := TNewProgressBar.Create(WizardForm);
   with VolumeIND do
    begin
     Parent := WizardForm;
     Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width + MusicButton.Width  + VolumeUP.Width  + VolumeDown.Width;
     Top := WizardForm.CancelButton.Top;
     Width := WizardForm.CancelButton.Width;
     Height := WizardForm.CancelButton.Height;
     Min := 0;
     Max := 100;
     Position := BASS_GetVolume;
    end;

//Проверка на то какая громкость стоит в системе
  if BASS_GetVolume >= 100 then volumeUP.Enabled := False;
  if BASS_GetVolume <= 0 then volumeDOWN.Enabled := False;

end;

function InitializeSetup(): Boolean;
var
  Ver, VerREG : Cardinal;
  ResultStr: string;

begin

           ExtractTemporaryFile('hl2.cjstyles');
	LoadSkin(ExpandConstant('{tmp}hl2.cjstyles'), '');
	Result := True;

 ver := 10593862; //версия нашего патча (указывать без точек и скобок)
 Result:=true;
  RegQueryStringValue(HKLM, 'SOFTWAREValveSteam', 'TF2Path', ResultStr); //берем путь
  if ResultStr = '' then
   begin
    MsgBox('Team Fortress 2 не установлен или установлен неверно.' #13#13 'Установка патча невозможна!', mbError, mb_Ok);
    Result:=false;  // если игра не установлена матюкнемся и работать небудем
   end else
    begin
     RegQueryDWordValue(HKLM, 'SOFTWAREValveSteam', 'TF2Version', VerREG); //спрашиваем версию
   if VerREg > Ver then
       begin
       MsgBox('Ваш клиент Team Fortress 2 имеет более новую версию чем патч.' #13#13 'Установка патча невозможна!', mbError, mb_Ok);
       Result:=false;    // если клиент уже имеет версию больше этого патча то отдыхаем
       end;
   if VerREG = Ver then
       begin
       MsgBox('Данный патч уже установлен.' #13#13 'Патч устанавливать нежелательно!', mbInformation, mb_Ok);
       end;   // если патч уже установлен то просто предупредим
    end;
//Проверка запущеный процессов//
  If RunTask('hl2.exe', false) then
    begin
      if MsgBox('Игра запущена! Закрыть её?', mbInformation, mb_YesNo) = idYes then
         begin
           KillTask('hl2.exe');
           KillTask('TF2.exe');
           Result:= True;
         end else
          Exit;
    end;
end;

//**************************************************//

procedure DeinitializeSetup();
begin
    BASS_Stop(); //нужно для остановки проигрывания
    BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом

// Скрываем окно до того как выгрузится скин, что бы не промелькнуло окно без скина
	ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
	UnloadSkin();
end;[/spoiler]
Изображение

Pauli174
Нович0к
Нович0к
Сообщения: 21
Зарегистрирован: 09.10.2008

#71 Сообщение 13.06.2009, 11:59

может есть у кого код стиля Steam ?

Tr1p
Нович0к
Нович0к
Сообщения: 4
Зарегистрирован: 15.08.2009

#72 Сообщение 15.08.2009, 17:58

Помогите мне с этой прогой. Я хочу сделать устновку кс:
Изображение
И ответе мне на вопрос что мне из каждой папки каждый файл вот так прописывать?

Пример:
Source: "D:\Counter-Strike\vstdlib_s.dll"; DestDir: "{app}"
Source: "D:\Counter-Strike\hlds.exe"; DestDir: "{app}"

Или можно целую папку сразу же сделать?

M1ke
Модератор
Модератор
Сообщения: 1464
Зарегистрирован: 17.06.2007
Откуда: 54
Благодарил (а): 2 раза
Поблагодарили: 90 раз
Контактная информация:

#73 Сообщение 15.08.2009, 18:29

Код: Выделить всё

Source: "D:\Counter-Strike\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Последний раз редактировалось M1ke 15.08.2009, 18:31, всего редактировалось 1 раз.
Изображение
Изображение
Изображение

Tr1p
Нович0к
Нович0к
Сообщения: 4
Зарегистрирован: 15.08.2009

#74 Сообщение 16.08.2009, 02:36

Как сделать ярлыки на рабочем столе и в панель управлении для игры cs 1.6? На рабочем столе у ярлыка должно быть такой путь "папка\hl.exe" -game cstrike -nomaster.

M1ke
Модератор
Модератор
Сообщения: 1464
Зарегистрирован: 17.06.2007
Откуда: 54
Благодарил (а): 2 раза
Поблагодарили: 90 раз
Контактная информация:

#75 Сообщение 16.08.2009, 06:50

Код: Выделить всё

[Icons]
Name: "{userdesktop}CS 1.6"; Filename: "{app}hl.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Parameters: -game cstrike -nomaster;
Будь добр, прогугли справку, ибо это всё элементарно%)

Добавлено спустя 57 секунд:
Tr1p писал(а):панель управлении
:shock:а туда то зачем?
Последний раз редактировалось M1ke 16.08.2009, 06:51, всего редактировалось 1 раз.
Изображение
Изображение
Изображение

Ответить