RetroRocket

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору На досуге вернулся к старому вопросу, которым озадачивался более четырёх лет назад - http://forum.ru-board.com/topic.cgi?forum=5&topic=48988&start=2140#21 В связи с миграцией на ТС 11.56 x64 решил всё таки сделать костыль для AmpView. Исходные данные: - AmpView.wlx64 - 3.5.0.0 - AmpView.exe - 3.5.3.0 Для воспроизведения midi и kar подключен банк WeedsGM3.sf2 в файле \WLX\AmpView\Config\default.ini через абсолютный путь: SoundFontPath=c:\TotalCommander\Plugins\WLX\AmpView\WeedsGM3.sf2 К сожалению, привязка к абсолютному пути лишает настроенный ТС портативности, а плагин не понимает переменную %COMMANDER_PATH% в своём ini-файле. Указание же относительного пути вида SoundFontPath=.\WeedsGM3.sf2 или SoundFontPath=.\Plugins\WLX\AmpView\WeedsGM3.sf2 не работает корректно и вот почему - когда при просмотре по F3 или Ctrl+Q вызывается AmpView.wlx64 и ТС передаёт ему строку с полным путём к файлу для проигрывания, плагин AmpView.wlx64 запускает из своего каталога плеер AmpView.exe. Но при этом для AmpView.exe в качестве текущего каталога (Current directory) оказывается тот, в котором лежит файл для проигрывания. Это наглядно видно на приложенном скриншоте Process Explorer'а слева. Разумеется, построить относительный путь .\Plugins\WLX\AmpView\WeedsGM3.sf2 от такого текущего каталога невозможно и загрузка банка WeedsGM3.sf2 не происходит. Как итог, midi и kar не воспроизводятся. В качестве решения нужно для AmpView.exe в момент его запуска явным образом задавать текущий каталог так, чтобы от него можно было корректно построить относительный путь .\Plugins\WLX\AmpView\WeedsGM3.sf2 или .\WeedsGM3.sf2. Я решил задавать текущий каталог для AmpView.exe как "%COMMANDER_PATH%\Plugins\WLX\AmpView" с помощью vb-скрипта: Код: Set WshShell = CreateObject("WScript.Shell") ' Входные аргументы, переданные скрипту. Set objArgs = WScript.Arguments ' Массив для входных аргументов. Set objList = CreateObject("System.Collections.ArrayList") ' Если нет входных аргументов, то показать окно About. If objArgs.Count = 0 Then MsgBox "Script for AmpView Plugin.", vbInformation, "About" WScript.Quit End If ' Входные аргументы objArgs() заносим в массив objList() For i = 0 To objArgs.Count - 1 objList.Add(objArgs(i)) Next ' Если первый аргумент равен "\n", то удаляем его. If objArgs(0) = "\n" Then objList.RemoveAt(0) End If ' Сменить текущий каталог на "%COMMANDER_PATH%\Plugins\WLX\AmpView" ' и запустить AmpView.exe, передав ему первый аргумент из массива. WshShell.Run "cmd.exe /c cd /d ""%COMMANDER_PATH%\Plugins\WLX\AmpView""&&.\AmpView.exe " & Chr(34) & objList(0) & Chr(34), 0, False | Содержимое скрипта сохранил в файле AmpView.vbs и положил рядом с AmpView.exe. Далее hex-редактором изменил строку запуска с \AmpView.exe на \AmpView.vbs в файле AmpView.wlx64. Теперь при воспроизведении midi и kar всегда корректно загружается WeedsGM3.sf2 по относительному пути, прописанном в ini-файле плагина AmpView.wlx64. Это видно на скриншоте справа. Скрипт запускается без показа окна консоли cmd.exe, фокус окна TC и Листера не теряется при просмотре по F3 и Ctrl+Q. P.S. Почему именно AmpView? Просто привык к нему, а 1by1 как-то не зашёл.
| Всего записей: 3004 | Зарегистр. 02-01-2018 | Отправлено: 15:33 13-02-2026 | Исправлено: RetroRocket, 15:39 13-02-2026 |
|