Скрипты Inno Setup. Помощь и советы [часть 6]
-
nik1967
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
можно ли чтобы при запуске созданного установщика с ключом выполнялся определённый файл?
а при обычном запуске никаких окон не отображалось, все распаковывалось в временную папку и запускался определенный файл2
(все файлы внутри установщика)
а при обычном запуске никаких окон не отображалось, все распаковывалось в временную папку и запускался определенный файл2
(все файлы внутри установщика)
-
Gnom_aka_Lexander
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
icq99999999,
Код:
пример запуска: "setup.exe -run"
------------------------------------------------------
при запуске с этим параметром:
1. извлекаем file1.exe в папку в темпе
2. запускаем его оттуда без ожидания завершения его процесса
3. возвращаем из InitializeSetup() True следствием чего будет инициализация приложения установки
при запуске без параметра:
1. извлекаем file2.exe в папку в темпе
2. запускаем его оттуда без ожидания завершения его процесса
3. возвращаем из InitializeSetup() False
читать дальше »
Код:
Код: Выделить всё
[Files]
Source: "file1.exe"; Flags: dontcopy nocompression
Source: "file2.exe"; Flags: dontcopy nocompression
[code ]
const
RUN_PARAM = '-run';
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
begin
if Pos(RUN_PARAM, GetCmdTail) 0 then
begin
ExtractTemporaryFile('file1.exe');
Exec(AddBackslash(ExpandConstant('{tmp}')) + 'file1.exe', '', ExpandConstant('{tmp}'), SW_HIDE, ewNoWait, ResultCode);
Result := True;
end else
begin
ExtractTemporaryFile('file2.exe');
Exec(AddBackslash(ExpandConstant('{tmp}')) + 'file2.exe', '', ExpandConstant('{tmp}'), SW_HIDE, ewNoWait, ResultCode);
end;
end;
пример запуска: "setup.exe -run"
------------------------------------------------------
при запуске с этим параметром:
1. извлекаем file1.exe в папку в темпе
2. запускаем его оттуда без ожидания завершения его процесса
3. возвращаем из InitializeSetup() True следствием чего будет инициализация приложения установки
при запуске без параметра:
1. извлекаем file2.exe в папку в темпе
2. запускаем его оттуда без ожидания завершения его процесса
3. возвращаем из InitializeSetup() False
-
jiumx60rus
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата Johny777:
Код:
а если нужно сделать следующее:
c запуска ключом:
распаковать всё в %temp%\spacep
скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\
запустить файл с параметром %temp%\spacep\1\hidcon.exe -setup.cmd
запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat
после завершения hidcon.exe удалить все извлечённые файлы
при обычном запуске:
распаковать всё в %temp%\spacep
скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\
запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat
после завершения hidcon.exe удалить папку %temp%\spacep\1
запустить %temp%\spacep\set.exe
после завершения процесса set.exe скопировать %temp%\spacep\comp.ini и положить рядом с программой
удалить все извлечённые файлы.
весь процесс должен быть полностью скрыт от глаз пользователя
Код:
Скрипты Inno Setup. Помощь и советы [часть 6]
а если нужно сделать следующее:
c запуска ключом:
распаковать всё в %temp%\spacep
скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\
запустить файл с параметром %temp%\spacep\1\hidcon.exe -setup.cmd
запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat
после завершения hidcon.exe удалить все извлечённые файлы
при обычном запуске:
распаковать всё в %temp%\spacep
скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\
запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat
после завершения hidcon.exe удалить папку %temp%\spacep\1
запустить %temp%\spacep\set.exe
после завершения процесса set.exe скопировать %temp%\spacep\comp.ini и положить рядом с программой
удалить все извлечённые файлы.
весь процесс должен быть полностью скрыт от глаз пользователя
-
audiofeel
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
saurn, И это снова я. В срипте Example_NewCheckListBox радиобуттоны и чекбоксы находятся на компонентслисте, а мне хотелось бы чтобы они были свободными, как в скрипте Прототип (только там задачи), т.к. я на них хочу повесить OneClick (звук wav).
-
mat_y@vk
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Nightwishh,
Цитата Nightwishh:
т.к. я на них хочу повесить OneClick (звук wav).
а в чём проблема? так не пойдёт?
Код:
=================================================================================
icq99999999,
Цитата icq99999999:
распаковать всё
а всё это сколько?
нет такой возможности извлечь папку из инсталла не во время установки. Только если извлекать по одному файлу, как в последнем примере.
Не знаю сколько файлов лежит в папке spacep, поэтому сделал так: пакуешь папку в 7z архив и кладёшь рядом с экзешником инсталла
Код:
Исходник с файлами:
Цитата Nightwishh:
т.к. я на них хочу повесить OneClick (звук wav).
Скрипты Inno Setup. Помощь и советы [часть 6]
а в чём проблема? так не пойдёт?
читать дальше »
Код:
Код: Выделить всё
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
// проигрывание звука
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
end;
=================================================================================
icq99999999,
Цитата icq99999999:
распаковать всё
Скрипты Inno Setup. Помощь и советы [часть 6]
а всё это сколько?
нет такой возможности извлечь папку из инсталла не во время установки. Только если извлекать по одному файлу, как в последнем примере.
Не знаю сколько файлов лежит в папке spacep, поэтому сделал так: пакуешь папку в 7z архив и кладёшь рядом с экзешником инсталла
читать дальше »
Код:
Код: Выделить всё
[Files]
Source: "7-zip32.dll"; Flags: dontcopy nocompression
[code ]
#define A = (Defined UNICODE) ? "W" : "A"
#define Use_Debug
const
SPACE_CHAR = #32;
SZ_OK = 0;
RUN_PARAM = '-run';
ARCHIVE_NAME = 'spacep.7z';
INI_NAME = 'comp.ini';
function SevenZip(const _hwnd: HWND; _szCmdLine: PAnsiChar; _szOutput: PAnsiChar; const _dwSize: DWORD): Integer; external 'SevenZip@files:7-zip32.dll stdcall';
function CopyFile(lpExistingFileName, lpNewFileName: String; bFailIfExists: BOOL): BOOL; external 'CopyFile{#A}@kernel32.dll stdcall';
function SimpleExtractSevenZip(const ArchivePath, DestPath: AnsiString): Boolean;
var
SevenZipCmd: AnsiString;
begin
SevenZipCmd := Format( 'x "%s" "%s" -y -hide', [ ArchivePath, AddBackslash(RemoveBackslash(DestPath)) ] );
CharToOemBuff(SevenZipCmd);
Result := SevenZip(0, SevenZipCmd, '', 0) = SZ_OK;
end;
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
TempPath, OuterPath: String;
begin
Result := False;
OuterPath := AddBackslash( ExpandConstant('{src}') );
TempPath := AddBackslash( ExpandConstant('{tmp}') );
if Pos(RUN_PARAM, GetCmdTail) 0 then // c запуска ключом:
begin
#ifdef Use_Debug
MsgBox('распаковать всё в %temp%\spacep', mbInformation, MB_OK);
#endif
if not SimpleExtractSevenZip(OuterPath + ARCHIVE_NAME, TempPath) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
#ifdef Use_Debug
MsgBox('скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\', mbInformation, MB_OK);
#endif
CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
#ifdef Use_Debug
MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -setup.cmd', mbInformation, MB_OK);
#endif
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-setup.cmd', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
#ifdef Use_Debug
MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat', mbInformation, MB_OK);
#endif
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
#ifdef Use_Debug
MsgBox('...папка в темпе удалится сама', mbInformation, MB_OK);
#endif
end else // при обычном запуске:
begin
#ifdef Use_Debug
MsgBox('распаковать всё в %temp%\spacep', mbInformation, MB_OK);
#endif
if not SimpleExtractSevenZip(OuterPath + ARCHIVE_NAME, TempPath) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
#ifdef Use_Debug
MsgBox('скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\', mbInformation, MB_OK);
#endif
CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
#ifdef Use_Debug
MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat', mbInformation, MB_OK);
#endif
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
#ifdef Use_Debug
MsgBox('после завершения hidcon.exe удалить папку %temp%\spacep\1', mbInformation, MB_OK);
#endif
DelTree(TempPath + 'spacep\1\', True, True, True);
#ifdef Use_Debug
MsgBox('запустить %temp%\spacep\set.exe', mbInformation, MB_OK);
#endif
Exec(TempPath + 'spacep\' + 'set.exe', '-1бат.bat', TempPath + 'spacep\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
#ifdef Use_Debug
MsgBox('после завершения процесса set.exe скопировать %temp%\spacep\comp.ini и положить рядом с программой', mbInformation, MB_OK);
MsgBox('а что, если инсталл на диске?', mbError, MB_OK);
#endif
CopyFile(TempPath + 'spacep\' + INI_NAME, OuterPath + INI_NAME, False);
#ifdef Use_Debug
MsgBox('...папка в темпе удалится сама', mbInformation, MB_OK);
#endif
end;
end;
Исходник с файлами:
-
mat_y@vk
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата Johny777:
а всё это сколько?
под всё я имел ввиду содержимое инстала, а поэтому использовать стороннюю утилиту 7z не нужно, вот только как 7z отключить?
след вопрос:
а можно ли после копирования проверить есть ли файл comp.ini рядом с прогой, если файла нет то копировать его из %temp%\spacep\ в C:\AppData\
а потом скопировать файл "comp.ini" из директории с прогой в %temp%\spacep\ если файла нет то копировать его из C:\AppData\ в %temp%\spacep\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка
можно ли отключить при компиляции изображение WizModernImage.bmp
можно ли чтобы при запуске с ключом файл находящейся внутри инстала распаковывался в %windir%\temp\ а при обычном запуске не распаковывался
а всё это сколько?
Скрипты Inno Setup. Помощь и советы [часть 6]
под всё я имел ввиду содержимое инстала, а поэтому использовать стороннюю утилиту 7z не нужно, вот только как 7z отключить?
след вопрос:
а можно ли после копирования проверить есть ли файл comp.ini рядом с прогой, если файла нет то копировать его из %temp%\spacep\ в C:\AppData\
а потом скопировать файл "comp.ini" из директории с прогой в %temp%\spacep\ если файла нет то копировать его из C:\AppData\ в %temp%\spacep\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка
можно ли отключить при компиляции изображение WizModernImage.bmp
можно ли чтобы при запуске с ключом файл находящейся внутри инстала распаковывался в %windir%\temp\ а при обычном запуске не распаковывался
-
sergey3695
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
audiofeel, кидай сам скрипт (желательно с файлами. можешь зашифровать архив или в лс). мне трудно так ответить. ну, можешь для лейбла с процентами поставить .BringToFront (не факт что поможет).
Или именнно в этих строках поиграйся с последним параметром в ImgLoad / В каком-то случае,да получится. По идеи поставь флаги False,но могу ошибится.
Или именнно в этих строках поиграйся с последним параметром в ImgLoad / В каком-то случае,да получится. По идеи поставь флаги False,но могу ошибится.
-
mat_y@vk
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Nightwishh через bass вроде можно,но не знаб работает ли без ботвы,так как там есть пример тот что тебе нужен
-
Noname22
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
icq99999999,
Цитата icq99999999:
вот только как 7z отключить?
да не быть мне кэпом! переписать код конечно
Цитата icq99999999:
под всё я имел ввиду содержимое инстала
переписал, изучай:
Код:
Цитата icq99999999:
а можно ли после копирования проверить есть ли файл comp.ini рядом с прогой, если файла нет то копировать его из %temp%\spacep\ в C:\AppData\
а потом скопировать файл "comp.ini" из директории с прогой в %temp%\spacep\ если файла нет то копировать его из C:\AppData\ в %temp%\spacep\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка
это всё в коде выше, вот только я не уверен насчёт C:\AppData\. Может имелось в виду то что тебе выдаёт месседжбокс в коде выше, в первой строке процедуры InitializeWizard();
Цитата icq99999999:
проверить есть ли файл comp.ini рядом с прогой
проверяется функцией FileExists, но ясделал проще. Просто если CopyFile вернёт False делаем что надо
Цитата icq99999999:
можно ли отключить при компиляции изображение WizModernImage.bmp
Я не совсем понимаю что ты имеешь в виду. Нельзя управлять теневым исходным кодом инно отсюда. Чтоб этой картинки не было в принципе, нужно переписать исходники инно.
Можно спрятать: впиши в InitializeWizard это WizardForm.WizardBitmapImage.Hide;
Можно пропустить страницу приветствия: [Setup] DisableWelcomePage=yes
Цитата icq99999999:
можно ли чтобы при запуске с ключом файл находящейся внутри инстала распаковывался в %windir%\temp\ а при обычном запуске не распаковывался
Можно:
1. если файл должен попасть в темп во время установки то так:
[Files]
Source: имя_файла; DestDir:{tmp}\; Check: RunWithParam();
2. если где-то ещё то как в примере отсюда
if RunWithParam() then ExtractTemporaryFile('имя_файла')
=================================================================================
Всем
Вот пример воспроизведения Wav файлов из памяти - быстрый доступ, быстрее чем с жёсткого диска. Это отдельный пример из кода ниже. Может кому пригодится:
Код:
===================================================================================================
Nightwishh
Цитата Nightwishh:
Как мне сделать звук при наведении и при нажатии у компонентов, без ботвы?
накатал пример при наведении и нажатии, пойдёт?
Код:
исходники простого воспроизведения и звука на компонентах:
Цитата icq99999999:
вот только как 7z отключить?
Скрипты Inno Setup. Помощь и советы [часть 6]
да не быть мне кэпом! переписать код конечно

Цитата icq99999999:
под всё я имел ввиду содержимое инстала
Скрипты Inno Setup. Помощь и советы [часть 6]
переписал, изучай:
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=Demo
AppVerName=1.1
OutputDir=Output
CreateAppDir=no
[Files]
Source: spacep\*; DestDir:{tmp}\spacep; Flags: recursesubdirs createallsubdirs
[code ]
#define A = (Defined UNICODE) ? "W" : "A"
#define Use_Debug
const
RUN_PARAM = '-run';
INI_NAME = 'comp.ini';
GCL_STYLE = -26;
CS_NOCLOSE = $200;
WM_LBUTTONDOWN = $0201;
WM_LBUTTONUP = $0202;
function CopyFile(lpExistingFileName, lpNewFileName: String; bFailIfExists: BOOL): BOOL; external 'CopyFile{#A}@kernel32.dll stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@User32.dll stdcall';
function SetClassLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): DWORD; external 'SetClassLong{#A}@User32.dll stdcall';
function GetClassLong(hWnd: HWND; nIndex: Integer): DWORD; external 'GetClassLong{#A}@User32.dll stdcall';
function RunWithParam(): Boolean;
begin
Result := Pos(RUN_PARAM, GetCmdTail) 0;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
TempPath, OuterPath: String;
begin
if CurStep = ssPostInstall then
begin
OuterPath := AddBackslash( ExpandConstant('{src}') );
TempPath := AddBackslash( ExpandConstant('{tmp}') );
if RunWithParam() then // c запуска ключом:
begin
CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-setup.cmd', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end else // при обычном запуске:
begin
CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
DelTree(TempPath + 'spacep\1\', True, True, True);
Exec(TempPath + 'spacep\' + 'set.exe', '-1бат.bat', TempPath + 'spacep\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
if not CopyFile(TempPath + 'spacep\' + INI_NAME, OuterPath + INI_NAME, False) then
begin
CopyFile(TempPath + 'spacep\' + INI_NAME, ExtractFilePath(ExpandConstant('{localappdata}')) + INI_NAME, False);
if not CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False) then
CopyFile(ExtractFilePath(ExpandConstant('{localappdata}')) + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
end;
end;
end;
end;
procedure InitializeWizard();
begin
ShowWindow(Application.Handle, SW_HIDE); // прячем кнопку в панели задач
SetClassLong(WizardForm.Handle, GCL_STYLE, GetClassLong(WizardForm.Handle, GCL_STYLE) or CS_NOCLOSE); // без Alt+F4
// прячем форму
WizardForm.BorderStyle := bsNone;
WizardForm.SetBounds(Screen.Width-777, Screen.Height-777, 0, 0);
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpReady then
begin
PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONDOWN, 0, 0);
PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONUP, 0, 0);
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpWelcome, wpSelectDir, wpFinished {, другие твои страницы}: Result := True;
end;
end;
Цитата icq99999999:
а можно ли после копирования проверить есть ли файл comp.ini рядом с прогой, если файла нет то копировать его из %temp%\spacep\ в C:\AppData\
а потом скопировать файл "comp.ini" из директории с прогой в %temp%\spacep\ если файла нет то копировать его из C:\AppData\ в %temp%\spacep\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка
Скрипты Inno Setup. Помощь и советы [часть 6]
это всё в коде выше, вот только я не уверен насчёт C:\AppData\. Может имелось в виду то что тебе выдаёт месседжбокс в коде выше, в первой строке процедуры InitializeWizard();
Цитата icq99999999:
проверить есть ли файл comp.ini рядом с прогой
Скрипты Inno Setup. Помощь и советы [часть 6]
проверяется функцией FileExists, но ясделал проще. Просто если CopyFile вернёт False делаем что надо
Цитата icq99999999:
можно ли отключить при компиляции изображение WizModernImage.bmp
Скрипты Inno Setup. Помощь и советы [часть 6]
Я не совсем понимаю что ты имеешь в виду. Нельзя управлять теневым исходным кодом инно отсюда. Чтоб этой картинки не было в принципе, нужно переписать исходники инно.
Можно спрятать: впиши в InitializeWizard это WizardForm.WizardBitmapImage.Hide;
Можно пропустить страницу приветствия: [Setup] DisableWelcomePage=yes
Цитата icq99999999:
можно ли чтобы при запуске с ключом файл находящейся внутри инстала распаковывался в %windir%\temp\ а при обычном запуске не распаковывался
Скрипты Inno Setup. Помощь и советы [часть 6]
Можно:
1. если файл должен попасть в темп во время установки то так:
[Files]
Source: имя_файла; DestDir:{tmp}\; Check: RunWithParam();
2. если где-то ещё то как в примере отсюда
Скрипты Inno Setup. Помощь и советы [часть 6]
с соответствующей проверкой if RunWithParam() then ExtractTemporaryFile('имя_файла')
=================================================================================
Всем
Вот пример воспроизведения Wav файлов из памяти - быстрый доступ, быстрее чем с жёсткого диска. Это отдельный пример из кода ниже. Может кому пригодится:
читать дальше »
Код:
Код: Выделить всё
[Setup]
...
RawDataResource=SndA:bugreporter_succeeded.wav |SndB:buttonclickreleaseo.WAV
[code ]
#define A = (Defined UNICODE) ? "W" : "A"
type
HINST = THandle;
HMODULE = HINST;
Pointer = Longint;
HRSRC = THandle;
HGLOBAL = THandle;
const
SND_ASYNC = $0001;
SND_NODEFAULT = $0002;
SND_MEMORY = $0004;
RT_RCDATA = 10;
function sndPlaySound(lpszSoundName: Pointer; uFlags: UINT): BOOL; external 'sndPlaySound{#A}@Winmm.dll stdcall';
function LoadResource(hModule: HINST; hResInfo: HRSRC): HGLOBAL; external 'LoadResource@kernel32.dll stdcall';
function FindResource(hModule: HMODULE; lpName: String; lpType: Longint): HRSRC; external 'FindResource{#A}@kernel32.dll stdcall';
function LockResource(hResData: HGLOBAL): Pointer; external 'LockResource@kernel32.dll stdcall';
var
hResourceSound: HRSRC;
pSoundMemory: Pointer;
procedure InitializeWizard();
begin
hResourceSound := FindResource(HInstance, '_IS_SNDA', RT_RCDATA);
pSoundMemory := LockResource(LoadResource(HInstance, hResourceSound));
sndPlaySound(pSoundMemory, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
===================================================================================================
Nightwishh
Цитата Nightwishh:
Как мне сделать звук при наведении и при нажатии у компонентов, без ботвы?
Скрипты Inno Setup. Помощь и советы [часть 6]
накатал пример при наведении и нажатии, пойдёт?
читать дальше »
Код:
Код: Выделить всё
[Setup]
...
RawDataResource=SndA:bugreporter_succeeded.wav |SndB:buttonclickreleaseo.WAV
[Components]
Name: "main"; Description: "Main Files";
Name: "main\a"; Description: "A Files";
Name: "main\b"; Description: "B Files";
[code ]
#define A = (Defined UNICODE) ? "W" : "A"
type
HINST = THandle;
HMODULE = HINST;
Pointer = Longint;
HRSRC = THandle;
HGLOBAL = THandle;
const
SND_ASYNC = $0001;
SND_NODEFAULT = $0002;
SND_MEMORY = $0004;
RT_RCDATA = 10;
function sndPlaySound(lpszSoundName: Pointer; uFlags: UINT): BOOL; external 'sndPlaySound{#A}@Winmm.dll stdcall';
function LoadResource(hModule: HINST; hResInfo: HRSRC): HGLOBAL; external 'LoadResource@kernel32.dll stdcall';
function FindResource(hModule: HMODULE; lpName: String; lpType: Longint): HRSRC; external 'FindResource{#A}@kernel32.dll stdcall';
function LockResource(hResData: HGLOBAL): Pointer; external 'LockResource@kernel32.dll stdcall';
var
pSoundMemory_A, pSoundMemory_B: Pointer;
function GetResourceSoundAddr(const ResourceName: String): Pointer;
var
hResourceSound: HRSRC;
begin
hResourceSound := FindResource(HInstance, ResourceName, RT_RCDATA);
Result := LockResource(LoadResource(HInstance, hResourceSound));
end;
procedure ComponentsOnClickCheck(Sender: TObject);
begin
sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
var
LastIndex: Integer;
procedure ComponentsItemsMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
if Index = -1 then
begin
LastIndex := -1;
Exit;
end;
if LastIndex = -1 then
begin
LastIndex := Index;
sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end else
if LastIndex = Index then Exit else
if LastIndex Index then
begin
LastIndex := Index;
sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;
procedure InitializeWizard();
begin
LastIndex := -1;
pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');
WizardForm.ComponentsList.OnItemMouseMove := @ComponentsItemsMouseMove;
WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;
исходники простого воспроизведения и звука на компонентах:
-
mat_y@vk
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
приветствую коллеги.
Хочу обратится за помощью. Можно ли реализовать удаление содержимого каталога, в каталоге {app} без бантика?
Например в каталоге {app}\Redist удалить все что находится в каталоге Redist не трогая содержимое {App}?
В идеале хотелось бы реализовать через Checkbox, типа "хотите ли вы очистить содержимое каталога Redist" и при отмеченном checkbox что бы происходила очистка.
Хочу обратится за помощью. Можно ли реализовать удаление содержимого каталога, в каталоге {app} без бантика?
Например в каталоге {app}\Redist удалить все что находится в каталоге Redist не трогая содержимое {App}?
В идеале хотелось бы реализовать через Checkbox, типа "хотите ли вы очистить содержимое каталога Redist" и при отмеченном checkbox что бы происходила очистка.