Autorun

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Или через вычисляемые строки:
И где здесь ФЗ?
Orion9 писал(а): полностью ознакомится со справкой
Тогда придется несколько томов разных справок наизусть заучивать.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):ShellExec "%COMMANDER_PATH%\Utilities\TCPlugman\Plugman.exe" /Restart
Сомневаюсь, что это связано с записью, она полностью корректна, скорее что-то с фактическим путём. Проверил, что приходит в функцию с вашей строкой и там всё ожидаемо в порядке.

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

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

MsgBox "%COMMANDER_PATH%\Utilities\TCPlugman\Plugman.exe"
которая покажет путь в таком же виде, как он приходит в ShellExec.

Ещё проверьте, что выдаётся в макросе SYSERRORTEXT сразу после выполнения ShellExec.
Orion9 писал(а):то можно попробовать через промежуточную переменную
Ну это же не выход, оно и так должно работать. Все три параметра ShellExec в командной записи разворачивают переменные, и это документировано.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Сомневаюсь, что это связано с записью, она полностью корректна
В таком виде конечно корректна и все работает. Я-же ее в ФЗ хотел перевести, а там %COMMANDER_PATH% не раскрывается.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig
А, понятно. Вот так можно:

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

# применение конкатенации переменной
ShellExec(COMMANDER_PATH & "\Utilities\TCPlugman\Plugman.exe", "/Restart")

# использование Set для разворачивания переменных в тексте
ShellExec(Set("%COMMANDER_PATH%\Utilities\TCPlugman\Plugman.exe"), "/Restart")
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Всем спасибо большое за варианты решения проблемы.
Loopback писал(а):# применение конкатенации переменной
ShellExec(COMMANDER_PATH & "\Utilities\TCPlugman\Plugman.exe", "/Restart")
Мне кажется это идеальный вариант. Остальные немного тяжеловаты. Это чисто на мой вкус. Дальше ведь команды посложнее будут и там запутаться можно:
ShellExec /SW_HIDE /WAIT %COMSPEC% '/c rename "%ini_Color%" %prev_name%'

Добавлено спустя 41 минуту:

А вот такое уже интересно:

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

# ShellExec "%COMMANDER_PATH%\Utilities\MENUIMG\MENUIMG.exe" '"%COMMANDER_PATH%\Bars\RESTART_RUS.BAR||INPUT"'
ShellExec(COMMANDER_PATH & "\Utilities\MENUIMG\MENUIMG.exe", COMMANDER_PATH & "\Bars\RESTART_RUS.BAR", "INPUT")
Неожиданно работает, но не очень нравится запись, так как не соответствует оригинальной для MENUIMG.exe, где параметр задается через ||
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Версия Autorun 2.2.18 beta

[cut="Список изменений"]
* КРИТИЧНО: отключено использование переменных вида %var% в выражениях
* КРИТИЧНО: убрана директива LegacyExpressions
* Process: ProcessExecGetOutput может возвращать текст длиной более 32765 символов
+ функции FileGetName, FileGetBaseName, FileGetDir, FileGetExt, FileChangeExt
- в методе GetStr объекта Buffer исправлено получение данных при Size=0
* внутренние изменения в работе объектов
+ конструкция Do..Until
+ конструкция For..In для перечисления объектов
+ методы LoadFromFile и SaveToFile в List
+ функции FileRead, FileWrite, FileAppend
+ объекты BinaryFile, TextFile
- потенциальная возможность падения при работе потоков
- не определялись некорректные символы в имени пользовательской функции
* изменение в работе Plugin: если wdx-плагин уже загружен TC, то выгружаться он не будет
+ директивы AutorunErrorBoxSimple, AutorunErrorBoxEditor, AutorunErrorBoxFont
+ скрипт может быть открыт для редактирования из нового диалога об ошибке
+ скрипт может быть прерван из нового диалога об ошибке
+ свой диалог сообщения об ошибке
- еще одна попытка исправить появление MsgBox и сообщений об ошибках под x64
[/cut]

В этой версии еще парочка обещанных ломающих изменений. Надеюсь, это последние. На данный момент больше ничего не просматривается, но лучше не расслабляться :)

И наконец, многострадальные файловые функции. Забавно вышло, что настолько базовые функции оказались реализованы уже после всего остального.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Серьезные изменения. Но пока не доделаю на ФЗ ShellExec, не буду обновляться, дабы не словить ошибки.
Вот это:

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

ShellExec /SW_HIDE /WAIT %COMSPEC% '/c rename "%ini_Color%" %prev_name%'
как я и предполагал, не удается переписать на ФЗ. Не подскажите, как здесь переписать?
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):не удается переписать на ФЗ
На самом деле, если работает - то зачем переписывать? Командная запись-то никуда не денется.

Но если хочется, то как-то так:

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

ShellExec('~/SW_HIDE /WAIT', COMSPEC, '/c rename "' & ini_Color & '" ' & prev_name)
Как по мне, читается не лучше. Пожалуй, с использованием StrFormat будет более читабельно:

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

ShellExec('~/SW_HIDE /WAIT', COMSPEC, StrFormat('/c rename "%s" %s', ini_Color, prev_name))
AkulaBig писал(а):Неожиданно работает
Действительно неожиданно, потому что при такой записи INPUT будет передан в ShellExec третьим параметром - который рабочий каталог... Так что это заморочки menuimg.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Но если хочется, то как-то так:
Работает!
Loopback писал(а):Как по мне, читается не лучше.
Мне кажется это как-раз тот случай, где нет смысла переписывать КЗ. Запись ужасна для понимания. Но, наверное все-же сделаю это, ради принципа.
Loopback писал(а):Действительно неожиданно, потому что при такой записи INPUT будет передан в ShellExec третьим параметром - который рабочий каталог...
Да, я это понял. Поэтому и удивился. Надо попробовать записать в виде, как вы сейчас привели. Вполне возможно что такая расстановка кавычек более правильная.
Loopback писал(а):Так что это заморочки menuimg
Да, надо будет при случае спросить у Андрея.

Добавлено спустя 6 минут:

Возник вопрос. В такой записи:

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

ShellExec(COMMANDER_PATH & "\Utilities\TCPlugman\Plugman.exe", "/Restart")
переменные будут раскрываться с учетом пробелов в путях и названиях?

Добавлено спустя 12 минут:

Установил 2.2.18 beta и сразу посыпались ошибки на пустые значения для всех записей типа:

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

	ini_TitleInfo = %COMMANDER_PATH% & "\Ini\TitleInfo.ini"
	TitleInfoThemeNum = IniRead(ini_TitleInfo, "Theme", "ThemeNum", 0)
	FormatData = IniRead(ini_TitleInfo, "Theme", TitleInfoThemeNum)
Изображение
Я-же процентики убрал. В чем причина?
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Я-же процентики убрал.
Вот эти процентики остались:

ini_TitleInfo = %COMMANDER_PATH% & "\Ini\TitleInfo.ini"

Другое дело, почему ini_TitleInfo становится пустым при такой записи не совсем понятно. С другой стороны, непонятно, как теперь трактовать некорректную запись %COMMANDER_PATH%. Видимо надо какую-то ошибку выдавать.

В общем, чувствую, довольно болезненное изменение.
AkulaBig писал(а):переменные будут раскрываться с учетом пробелов в путях и названиях?
Переменные будут раскрываться как есть. А в чём тут проблема?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Вот эти процентики остались
Все получилось.
Loopback писал(а):Видимо надо какую-то ошибку выдавать.
Подкинул я вам тему для размышления :roll:
Loopback писал(а):В общем, чувствую, довольно болезненное изменение.
Очень болезненное. Потому что сразу стало непонятно, когда писать %COMMANDER_PATH%, а когда COMMANDER_PATH.
Loopback писал(а):Переменные будут раскрываться как есть. А в чём тут проблема?
Вопрос в том, что если сборка ТС будет лежать по пути с пробелом и в папке с пробелом, она будет работать?
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Версия Autorun 2.2.18 beta

[cut="Список изменений"]
* КРИТИЧНО: отключено использование переменных вида %var% в выражениях
* КРИТИЧНО: убрана директива LegacyExpressions
* Process: ProcessExecGetOutput может возвращать текст длиной более 32765 символов
+ функции FileGetName, FileGetBaseName, FileGetDir, FileGetExt, FileChangeExt
- в методе GetStr объекта Buffer исправлено получение данных при Size=0
* внутренние изменения в работе объектов
+ конструкция Do..Until
+ конструкция For..In для перечисления объектов
+ методы LoadFromFile и SaveToFile в List
+ функции FileRead, FileWrite, FileAppend
+ объекты BinaryFile, TextFile
- потенциальная возможность падения при работе потоков
- не определялись некорректные символы в имени пользовательской функции
* изменение в работе Plugin: если wdx-плагин уже загружен TC, то выгружаться он не будет
+ директивы AutorunErrorBoxSimple, AutorunErrorBoxEditor, AutorunErrorBoxFont
+ скрипт может быть открыт для редактирования из нового диалога об ошибке
+ скрипт может быть прерван из нового диалога об ошибке
+ свой диалог сообщения об ошибке
- еще одна попытка исправить появление MsgBox и сообщений об ошибках под x64
[/cut]
Очень крутые фичи и фиксы в новой версии. Сейчас, правда, заняться обновлением не могу, но завтра по возможности проверю.

AkulaBig, не переживайте за пробелы в путях, всё должно работать, проверено не раз.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):не переживайте за пробелы в путях, всё должно работать, проверено не раз.
Хорошо.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Обновил версию по той же ссылке, добавил временное, более информативное сообщение об исправлении. Других изменений нет.
AkulaBig писал(а):Потому что сразу стало непонятно, когда писать %COMMANDER_PATH%, а когда COMMANDER_PATH.
Проценты в КЗ, без процентов в ФЗ. Как раз теперь всё чётко разграничено.

Ну и новое сообщение об ошибке чётко указывает, где и что нужно сделать. Где не указывает - там не нужно :) Пусть побудет пару версий, потом уберу.
AkulaBig писал(а):Вопрос в том, что если сборка ТС будет лежать по пути с пробелом и в папке с пробелом, она будет работать?
Ну вот взять ту же строку COMMANDER_PATH & "\Utilities\TCPlugman\Plugman.exe", допустим COMMANDER_PATH имеет значение C:\Total Commander. После склейки получится C:\Total Commander\Utilities\TCPlugman\Plugman.exe. Почему бы ей не работать?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Обновил версию по той же ссылке
Теперь при запуске ТС сразу мелькает какое-то сообщение, хотя со вчерашней версией все работает. И при этом отключает плагин Autorun_NagScreen.dll. То-есть появляется окно с предложением нажать на кнопку. Так бывает, когда ошибка в коде скриптов. Вернулся на вчерашнюю версию.
Loopback писал(а):Проценты в КЗ, без процентов в ФЗ. Как раз теперь всё чётко разграничено.
Это понятно. Но в данных случаях проценты ставить обязательно:

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

IcoNumber = "%COMMANDER_PATH%\Images\Enumeration\00.ico"
...
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\IcoNumber.aucfg
...
SetEnv /EV arc_7z %COMMANDER_PATH%\Archivers\7z\7z.exe
А в данном работать не будет:

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

ini_TitleInfo = %COMMANDER_PATH% & "\Ini\TitleInfo.ini"
Как начинающему скриптописателю, который не знает про ФЗ и КЗ, разобраться в этом? До этого было может и неправильно, но логично. Может тогда проценты убрать везде, кроме КЗ? Тогда будет все логично. Кстати, мне тоже не понятно. А разве эти записи можно отнести к ФЗ или КЗ? Это-же не функции.
Loopback писал(а):Ну и новое сообщение об ошибке чётко указывает, где и что нужно сделать.
К сожалению его даже не удается увидеть. Тогда-бы хоть понятно стало, это ошибка в Autorun или все-же что-то я не переделал.
Loopback писал(а):Почему бы ей не работать?
С этим уже все ясно. Просто до этого %COMMANDER_PATH% надо было брать в кавычки.
Ответить