Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Аватара для icq99999999

Пользователь


Сообщения: 86
Благодарности: 3

Профиль | Отправить PM | Цитировать


можно ли чтобы при запуске созданного установщика с ключом выполнялся определённый файл?
а при обычном запуске никаких окон не отображалось, все распаковывалось в временную папку и запускался определенный файл2
(все файлы внутри установщика)

Отправлено: 15:26, 12-08-2013 | #1001



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


icq99999999,
читать дальше »
Код: Выделить весь код
[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
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:49, 12-08-2013 | #1002


Аватара для icq99999999

Пользователь


Сообщения: 86
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата 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 и положить рядом с программой
удалить все извлечённые файлы.
весь процесс должен быть полностью скрыт от глаз пользователя

Последний раз редактировалось icq99999999, 12-08-2013 в 23:59.


Отправлено: 21:40, 12-08-2013 | #1003


Пользователь


Сообщения: 76
Благодарности: 2

Профиль | Отправить PM | Цитировать


saurn, И это снова я. В срипте Example_NewCheckListBox радиобуттоны и чекбоксы находятся на компонентслисте, а мне хотелось бы чтобы они были свободными, как в скрипте Прототип (только там задачи), т.к. я на них хочу повесить OneClick (звук wav).

Отправлено: 21:49, 12-08-2013 | #1004


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Nightwishh,
Цитата Nightwishh:
т.к. я на них хочу повесить OneClick (звук wav). »
а в чём проблема? так не пойдёт?
читать дальше »
Код: Выделить весь код
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
    // проигрывание звука
end;


procedure InitializeWizard();
begin
    WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
end;


=================================================================================
icq99999999,
Цитата icq99999999:
распаковать всё »
а всё это сколько?
нет такой возможности извлечь папку из инсталла не во время установки. Только если извлекать по одному файлу, как в последнем примере.
Не знаю сколько файлов лежит в папке 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;


Исходник с файлами:

Последний раз редактировалось Johny777, 14-02-2014 в 18:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:19, 13-08-2013 | #1005


Аватара для icq99999999

Пользователь


Сообщения: 86
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Johny777:
а всё это сколько? »
под всё я имел ввиду содержимое инстала, а поэтому использовать стороннюю утилиту 7z не нужно, вот только как 7z отключить?
след вопрос:
а можно ли после копирования проверить есть ли файл comp.ini рядом с прогой, если файла нет то копировать его из %temp%\spacep\ в C:\AppData\
а потом скопировать файл "comp.ini" из директории с прогой в %temp%\spacep\ если файла нет то копировать его из C:\AppData\ в %temp%\spacep\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка
можно ли отключить при компиляции изображение WizModernImage.bmp
можно ли чтобы при запуске с ключом файл находящейся внутри инстала распаковывался в %windir%\temp\ а при обычном запуске не распаковывался

Последний раз редактировалось icq99999999, 13-08-2013 в 21:17.


Отправлено: 09:11, 13-08-2013 | #1006


Пользователь


Сообщения: 76
Благодарности: 2

Профиль | Отправить PM | Цитировать


Блин, я сам всех и себя запутал. Вообщем есть скрипт Button Sound
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
LicenseFile=compiler:License.txt

[Files]
Source: UI\buttonclick.WAV; Flags: dontcopy
Source: UI\buttonclickrelease.WAV; Flags: dontcopy
Source: UI\buttonrollover.WAV; Flags: dontcopy

[ Code]
function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal): Integer; external 'sndPlaySoundA@winmm stdcall delayload'; /// функция проигрывания звука

procedure PlaySoundOnEnter(Sender: TObject); /// процедура при наведении
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonrollover.WAV'),$0001);
end;

procedure PlaySoundOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  /// при нажатии кнопки
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonclick.WAV'),$0001);
end;

procedure PlaySoundOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  /// при отпускании кнопки
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonclickrelease.WAV'),$0001);
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('buttonclick.WAV'); /// функцией ExtractTemporaryFile извлекаем файл во временную папку - при нажатии кнопри паши по контролу (не путать с кликом)
  ExtractTemporaryFile('buttonclickrelease.WAV'); /// при отпускании кнопки мыши с контрола
  ExtractTemporaryFile('buttonrollover.WAV');  /// при наведении

  with WizardForm do
  begin
    with NextButton do
    begin
      OnMouseEnter := @PlaySoundOnEnter;
      OnMouseDown := @PlaySoundOnMouseDown;
      OnMouseUp := @PlaySoundOnMouseUp;
    end;

    with BackButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;

    with CancelButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;

    with DirBrowseButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;

    with GroupBrowseButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;
  end;
end;
Как мне сделать звук при наведении и при нажатии у компонентов, без ботвы?

Отправлено: 18:58, 13-08-2013 | #1007


Ветеран


Сообщения: 510
Благодарности: 51

Профиль | Отправить PM | Цитировать


Nightwishh через bass вроде можно,но не знаб работает ли без ботвы,так как там есть пример тот что тебе нужен

Отправлено: 19:59, 13-08-2013 | #1008


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z MemSoundDemo.7z
(4.0 Kb, 47 просмотров)

icq99999999,
Цитата icq99999999:
вот только как 7z отключить? »
да не быть мне кэпом! переписать код конечно
Цитата icq99999999:
под всё я имел ввиду содержимое инстала »
переписал, изучай:

читать дальше »
Код: Выделить весь код
[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\
можно ли убрать появляющейся(при запуске) на понели задач окошко в котором написано установка »
это всё в коде выше, вот только я не уверен насчёт 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. если где-то ещё то как в примере отсюда http://forum.oszone.net/post-2200430-1002.html с соответствующей проверкой
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:
Как мне сделать звук при наведении и при нажатии у компонентов, без ботвы? »
накатал пример при наведении и нажатии, пойдёт?
читать дальше »
Код: Выделить весь код
[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;



исходники простого воспроизведения и звука на компонентах:

Последний раз редактировалось Johny777, 16-08-2013 в 12:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:43, 13-08-2013 | #1009


Аватара для tr011_tmn

Ветеран


Автор проектов


Сообщения: 1002
Благодарности: 295

Профиль | Отправить PM | Цитировать


приветствую коллеги.

Хочу обратится за помощью. Можно ли реализовать удаление содержимого каталога, в каталоге {app} без бантика?

Например в каталоге {app}\Redist удалить все что находится в каталоге Redist не трогая содержимое {App}?

В идеале хотелось бы реализовать через Checkbox, типа "хотите ли вы очистить содержимое каталога Redist" и при отмеченном checkbox что бы происходила очистка.

-------
Насяльника!!!!! Джамшута адроннама коллайдер фключал, ключ павирнул и ашельбе машельбе асин, вульшарьбелеме!! и полный пистесама насяльника!
Цирк уехал ))) клоуны остались


Отправлено: 11:19, 14-08-2013 | #1010



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход