PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 [64] 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

MKN
08-08-2014, 10:56
Как вариант »
Если речь о звуке, то можно попробовать bass.dll. По моему, это самый лучший вариант для воспр. звука в NSIS

MaGoth
08-08-2014, 17:26
Как вариант можно заюзать внешнее консольное приложение для проигрывания аудио, например sounder.exe (30 Кб), сам не тестил, т.к. лень и хочется спать
В своё время для сборки контры я использовал mpg123.exe для проигрывания mp3 файла сразу после запуска установщика, но там вес файла был ~350 Кб »
Буду посмотреть, хотя консолей хотелось бы избегать...


Если речь о звуке, то можно попробовать bass.dll. По моему, это самый лучший вариант для воспр. звука в NSIS »
Косяков в работе с Юникодом нет? Цикличность и прочее по воспроизведению держит, мультиформатна для треков, или только один какой поддерживает?

Зы, .. Хм, а кто ее разработчик? что-то все ссылки ведут на трешевые свалки длл.. Для Нсис есть ее описание примеры в работе на сайте ничего не нашел..?

Otlanta
09-08-2014, 13:54
Приветствую, подскажите решение, в скрипте nsi всего одна секция, но она разрослась, используются все стандартные переменные начиная от $0 и до $R9, и накладываются друг на друга, стала появлятся ошибка, каким образом лучше всего можно оптимизировать эту структуру?

K.A.V.
09-08-2014, 17:27
Приветствую, подскажите решение, в скрипте nsi всего одна секция, но она разрослась, используются все стандартные переменные начиная от $0 и до $R9, и накладываются друг на друга, стала появлятся ошибка, каким образом лучше всего можно оптимизировать эту структуру? »
Странный вопрос...

Секция сама разрослась? Нет возможности добавить в код дополнительных переменных? Нет возможности раскидать код по функциям? Ошибка? Какая? Каким образом? Какую структуру?
Вы с такими вопросами лучше к гадалке сходите, которая ещё и в NSIS при этом шарит, она сразу и вашу всю секцию увидит, и вашу "структуру" и посоветует, как лучше код оптимизировать

Otlanta
09-08-2014, 17:55
а как завершить процесс с помощью плагина System?

где можно найти ProcessFunc работающий с 3 версией NSIS'a?

K.A.V.
09-08-2014, 18:58
а как завершить процесс с помощью »
Можно использовать KillProc plug-in (http://nsis.sourceforge.net/KillProc_plug-in)

где можно найти ProcessFunc работающий с 3 версией NSIS'a? »
У Вячеслава (он ведь автор), он не обновил хидер к выходу справочника, хотя я ему писал насчет этого, так что вопросы по этому поводу к нему :not-me:

Otlanta
09-08-2014, 19:21
Не хотелось бы использовать плагины для этой задачи, можно же наверно средствами WinApi...

K.A.V.
09-08-2014, 19:37
можно же наверно средствами WinApi... »
System::Call "kernel32::OpenProcess(i0x0001, i0, i1160)i.r0"
System::Call "kernel32::TerminateProcess(ir0, i1)i.r1"
где 1160 - PID процесса

Otlanta
10-08-2014, 00:01
K.A.V., а по имени процесса можно?

K.A.V.
10-08-2014, 16:25
K.A.V., а по имени процесса можно? »
Насколько я понимаю, нужно писать функцию перечисления процессов, как в вышеупомянутом ProcessFunc

Blok
11-08-2014, 18:57
Всем привет!
Если речь о звуке, то можно попробовать bass.dll. По моему, это самый лучший вариант для воспр. звука в NSIS »
А вы можете привести пример сценария с использованием этой библиотеки? Например, чтобы звучала фоновая музыка. У меня не получается создать рабочий код. Вот как делаю я (пример):

XPStyle on
Name "Test"
OutFile "TestBass.exe"
Caption "Test Bass"
BrandingText 'Test'


!include "MUI2.nsh"
InstallDir "$EXEDIR"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

Section "OGG"
SectionEnd

Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\BASS.dll BASS.dll
File /oname=$PLUGINSDIR\mymusic.ogg mymusic.ogg
StrCpy $R5 "$PLUGINSDIR\mymusic.ogg"

; Инициализация
System::Call '$PLUGINSDIR\BASS::BASS_Init(i -1,i 44100,i 0,i 0,i 0)'

; Создание файлового потока
System::Call '$PLUGINSDIR\BASS::BASS_StreamCreateFile(i 0,t R5,i 0,i 0,i 4)'

; Воспроизведение канала
System::Call '$PLUGINSDIR\BASS::BASS_ChannelPlay(i 0, i 0)'
FunctionEnd

Function .onGUIEnd
System::Call '$PLUGINSDIR\BASS::BASS_ChannelStop()'
System::Call '$PLUGINSDIR\BASS::BASS_StreamFree()'
System::Call '$PLUGINSDIR\BASS::BASS_Free()'
FunctionEnd


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

Спасибо.

MKN
11-08-2014, 19:10
А вы можете привести пример сценария с использованием этой библиотеки? »
Уже было (Пост 872 стр 88 ) Bass.dll лучше скачать последнюю версию (та что во вложении глючная) с сайта разработчика http://www.un4seen.com/
Там же доки (полезные тем, кто разбирается в программировании)
На русском : http://www.tiflocomp.ru/games/design/sound_games/bass.php
Применимо к NSIS много полезного в известном хидере Bass.nsh by Diego Pedroso (под рукой сейчас нет, но в сети навалом)
PS вот пример : https://yadi.sk/d/gzFnjE_JZSNEw
как правильно надо использовать вызовы из сторонних DLL в NSIS »
Согласно докам к System плагину. Кое что есть в справочнике. Правда изложение доков оставляет желать лучшего и специфика использования весьма мутная... Так что вопросы лучше адресовать гуру, например Вячеславу kotkovets, (думаю не нахмурится за "перевод стрелок" :) )

Blok
11-08-2014, 22:05
Спасибо, буду пытаться разобраться. Но сравнив код, который наваял я, и который показан в примере MKN, у меня возникает множество вопросов. Ясный перец с наскоку здесь не разберешься, особенно если в программировании полный ноль. Справку к плагину System я смотрел, но через переводчик гугл. Только понял, что для передачи в функции целых значений надо использовать литеру "i", для строки - "t", а если это логическое значение, то тогда как? Потом очень неясный вопрос с параметром HWND. Откуда его брать? В общем пока тупик. Понимаете, не хотелось бы тупо копировать часть кода, т.к. нет маневра. Изменяешь условия примера и ничего не работает. Ладно, не буду вас отвлекать.

Blok
12-08-2014, 13:59
Возвращаясь к библиотеке bass.dll. Просидел всю ночь за мануалами и выявил следующие недостатки при использовании её в NSIS:

- при включении в сценарии параметра поддержки стилей XP (XPStyle on) > воспроизведение не работает;
- при включении в сценарии параметра компиляции юникодной версии (Unicode true) > воспроизведение не работает;
- при использовании в сценарии графической оболочки MUI или MUI2 (директива !include "MUI.nsh" (!include "MUI2.nsh")) > воспроизведение не работает.

При тестировании использовалась последняя версия bass.dll и NSIS v3.0b с официальных сайтов разработчика.

Вот немного переделанный рабочий сценарий, предложенный MKN (Пост 872 стр 88 ):

; Простой GUI - версия ANSI - при отключенной поддержки стилей ХР

; Unicode true ; если включить, то воспроизведение не работает

!include "LogicLib.nsh"

!define BASS_DLL "bass.dll"
!define BASS_LOC "$PLUGINSDIR\${BASS_DLL}"
!define MP3 "mymusic.ogg"
!define MP3_LOC "$PLUGINSDIR\mymusic.ogg"

OutFile "Bass_SimpleGUI.exe"
ShowInstDetails show

; XPStyle on ; если включить, то воспроизведение не работает

Page license
Page components
Page directory
Page instfiles

Section "Ogg"
SectionEnd

Function .onInit
InitPluginsDir
File "/oname=${MP3_LOC}" "${MP3}"
File "/oname=${BASS_LOC}" "${BASS_DLL}"

; Выполняем инициализацию аудио устройства
System::Call '${BASS_LOC}::BASS_Init(i -1,i 44100,i 0,i 0,i n) b.r0'

; Создаем файловый поток для воспроизведения
System::Call '${BASS_LOC}::BASS_StreamCreateFile(b 0,t "${MP3_LOC}",i 0,i 0,i 0) i.r1'

; Если файловый поток успешно создан (не равен 0), то
${If} $1 != "0"
StrCpy $R5 "Initialization OK."

; Устанавливаем для канала флаг зацикливания при воспроизведении
System::Call '${BASS_LOC}::BASS_ChannelFlags(i r1, i 4, i 4) i.R0'

; Запускаем воспроизведение канала
System::Call '${BASS_LOC}::BASS_ChannelPlay(i r1, b 0) i.R4'

; Получаем номер ошибки
System::Call '${BASS_LOC}::BASS_ErrorGetCode(i) i.R1'
${Else}
; Закрываем все существующие каналы воспроизведения и освобождаем системные ресурсы
System::Call '${BASS_LOC}::BASS_Free()'
StrCpy $R5 "Initialization failed."
${EndIf}

; Выводим сообщение о параметрах воспроизведения (для отладки)
MessageBox MB_ICONINFORMATION|MB_OK "HSTREAM handler = $1. $\r$\n\
$R5 $\r$\n\
BASS_ChannelFlags returned - $R0. $\r$\n\
BASS_ChannelPlay returned - $R4. $\r$\n\
BASS_ErrorGetCode - $R1."
FunctionEnd


Function .onGUIEnd
; Останавливаем воспроизведение канала
System::Call '${BASS_LOC}::BASS_ChannelStop(i r1)'
; Освобождаем системные ресурсы
System::Call '${BASS_LOC}::BASS_StreamFree(i r1)'
; Закрываем все существующие каналы воспроизведения и освобождаем системные ресурсы
System::Call '${BASS_LOC}::BASS_Free()'
FunctionEnd
При передаче в функцию строки с именем файла, который необходимо воспроизвести, согласно документации System, можно указывать тип строки: t - TCHAR text, ANSI string или w - WCHAR text, Unicode string. То есть, если я правильно понял, то при компиляции юникодной версии инсталлятора команду

System::Call '${BASS_LOC}::BASS_StreamCreateFile(b 0,t "${MP3_LOC}",i 0,i 0,i 0) i.r1'

надо изменить на

System::Call '${BASS_LOC}::BASS_StreamCreateFile(b 0,w "${MP3_LOC}",i 0,i 0,i 0) i.r1'

Но это не помогает - воспроизведение не работает.

Еще в функции BASS_StreamCreateFile есть флаг BASS_UNICODE, который указывает, что имя файла задано в кодировке Unicode. Но установка этого флага не дает положительного результата

!define BASS_UNICODE 0x80000000
System::Call '${BASS_LOC}::BASS_StreamCreateFile(b 0,w "${MP3_LOC}",i 0,i 0,i ${BASS_UNICODE}) i.r1'

- воспроизведение не работает.

Это проблемы библиотеки bass.dll или NSIS? Можно ли как-то решить все эти вопросы? Или может быть я что-то делаю неправильно?

MKN
12-08-2014, 16:32
- при включении в сценарии параметра поддержки стилей XP (XPStyle on) > воспроизведение не работает;
- при использовании в сценарии графической оболочки MUI или MUI2 (директива !include "MUI.nsh" (!include "MUI2.nsh")) > воспроизведение не работает. »
Откуда такие сведения ? У меня воспроизведение работает и при XPStyle on и при !include "MUI2.nsh". Какая тут вообще может быть связь ?
В каком месте играть музыке, выбираешь сам.
Про Unicode не знаю, нет в нём надобности. Но скорее всего будет работать, т.к. библиотека эта в каком только ПО не применяется...

Blok
12-08-2014, 17:53
Откуда такие сведения ? »
Сидел пробовал так и сяк - у меня не работает. А вот когда я взял старую версию библиотеки bass v2.3.0.3, то воспроизведение запускается при любых комбинациях параметров XPStyle, Unicode, MUI и MUI2 в тексте сценария. Почему не работает bass v2.4.10.0 - я не знаю. Перепробовал все версии библиотеки bass от 2.4.0.0 до текущей - нема дела. И только с bass v2.3.0.3 без проблем заработало. Возможно причина действительно только на моей системе.

Что мешает проверить работу библиотеки bass v2.4.10.0 в юникодной версии инсталлятора? То что Вам нет надобности использовать использовать юникодную версию не значит, что эта надобность не возникнет у другого пользователя, например, MaGoth (сообщение 1263 (http://forum.oszone.net/post-2386687-1263.html)) интересовался этим вопросом. ;)

Добавлено:
Все ребята, отбой. Проблема была в моей системе (спасибо MKN за наводку). Переустановил. Теперь все путем - все воспроизводится. Прошу прощения за причиненные неудобства.

K.A.V.
12-08-2014, 18:44
Что мешает проверить работу библиотеки bass v2.4.10.0 в юникодной версии инсталлятора? »
А вам что мешает?

То что Вам нет надобности использовать использовать юникодную версию не значит, что эта надобность не возникнет у другого пользователя »
Если у кого-то есть надобность использовать юникодную версию, это не значит, что я должен заранее сам это протестировать за кого-то и сказать ему о результате
Кому надо - сам пусть для себя и проверяет, в чем вопрос то? Как будто здесь кто-то кому-то обязан...Руки есть, интернет есть, качайте что нужно и тестируйте сами

MaGoth (сообщение 1263) интересовался этим вопросом »
Не поверите, но в интернете все равны, у всех одинаковые возможности

Я, например, ни разу ничего не тестировал в уникодной версии NSIS даже будучи автором справочника, т.к.
нет в нём надобности »
Если взялись за изучение NSIS, то учитесь делать/тестировать сами то, что вам нужно, а мы подскажем, насколько есть знаний и опыта

MKN
12-08-2014, 18:44
Blok,
То что библиотека работает и в UNICODE - 100%
Но, в доке : "в структуре BASS_DEVICEINFO значение по умолчанию ANSI"
Т.е. надо это дело подружить с NSIS. Каким образом, надо думать...

Blok
12-08-2014, 19:17
То что библиотека работает и в UNICODE - 100% »
Да работает, уже удостоверился в этом. Всем спасибо. ;)

kotkovets
13-08-2014, 01:27
где можно найти ProcessFunc работающий с 3 версией NSIS'a? »
будет время обновлю




© OSzone.net 2001-2012