Autorun

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

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

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Тут, раздел Объявление переменных.
Понятно. Без обоснования только.
Loopback писал(а):Ну давай подведем краткое резюме.
В справке, надеюсь, это всё отражено будет. Добавил пока пост в закладки, чтобы сперва сюда при ошибках смотреть.
А теперь вопрос. Сейчас у нас не КЗ/ФЗ, а КЗ+ФЗ? Или как? На КЗ новинки (функции, циклы и т. д.) заведуться или надо между прагмами переключаться?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Loopback писал(а):Только так
ControlSetMouseAction ... SendCommand 123
Или так
ControlSetMouseAction( ... , SendCommand, 123)

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

ControlSetMouseAction /L /K:C /K:S /B:3 17 SendCommand 1004
Работает.

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

ControlSetMouseAction(/L, /K:C, /K:S, /B:3, 17, SendCommand, 1004)
«Left value conversion error: / L» при запуске ТС.
Изображение ЧЯДНТ?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

yozhik
Объединённые в один параметр ключи с тильдой спереди в апострофы/кавычки надо заключить. См. справку.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Flasher
Спасибо, с этим разобрался. А вот из такой КЗ (сама эта строка — рабочая):

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

ControlSetMouseAction /R /K:A /B:1 17 ShellExec %AUTOIT% "%COMMANDER_PATH%\Profile\scripts\FButtonHint.au3 /f3"
у меня никак не получается сделать рабочую ФЗ.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

yozhik
Ну а ФЗ-вариант-то где?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Flasher
А, нет, пардон :oops: , вот эта заработала:

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

ControlSetMouseAction('~/R /K:A /B:1 17', ShellExec, %AUTOIT%, "%COMMANDER_PATH%\Profile\scripts\FButtonHint.au3 /f3")
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):В справке, надеюсь, это всё отражено будет.
Конечно, будет отдельный раздел по синтаксису. Иначе не разберешься. Пожалуй, всё описанное здесь можно уже сейчас на бета-страницу перенести.
Flasher писал(а): Сейчас у нас не КЗ/ФЗ, а КЗ+ФЗ? Или как? На КЗ новинки (функции, циклы и т. д.) заведуться или надо между прагмами переключаться?
Да, КЗ+ФЗ. Просто надо понимать, что уточнение "командная запись", равно как и "функциональная запись" относится не к скрипту в целом, а только к методу записи отдельных команд/функций. Иными словами, в КЗ может быть записан только вызов команды или функции. Выражения всегда записываются только в ФЗ, если в выражении используется функция, она тоже записывается в ФЗ, по другому просто невозможно. Поэтому говоря о выражениях, можно даже не упоминать, в какой они записи - это всегда ФЗ. То же самое объявление переменной и присваивание - это всегда ФЗ.

Вычисляемая строка - в некотором роде костыль, чтобы дать возможность в параметре команды в КЗ использовать выражения в ФЗ.

Вполне очевидно, что все новинки так или иначе работают с выражениями в ФЗ. Была попытка скрестить ужа с ежом, в виде функций в командной записи FileExist/ProcessExist в условиях, но она, что очевидно, провалилась. Но это не отменяет возможности по прежнему записывать команды в КЗ внутри блоков условий, циклов и пользовательских функций:

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

If a = 0 then   -- ФЗ (выражение a = 0)
  MsgBox %a%    -- КЗ (команда)
  MsgBox(a)     -- ФЗ (команда)
  b = a + 1     -- ФЗ (присваивание)
endif

MyFunc 123 456   -- КЗ (функция)
MyFunc(123, 456) -- ФЗ (функция)

Func MyFunc(a, b = 1)  -- ФЗ (объявление функции)
  Local c  = 1         -- ФЗ (объявление переменной)   
  MsgBox %a%           -- КЗ (команда)
  MsgBox(a)            -- ФЗ (команда)
EndFunc
Так что переключаться между прагмами не нужно, скрипт в целом будет работать при любой. Прагма будет только переключать два режима работы парсера выражений:

1. Старый - строки могут быть в кавычках (любых из двух типов), либо без кавычек, переменные только в %%. В случае отсутствия переменной возвращается само имя переменной (можно и пустую строку возвращать, но это "потеря совместимости"). Ошибок не выдавалось. Есть неопределенности при работе со строками.
2. Новый - строки в кавычках (любых из двух типов), переменные в выражениях могут быть либо в %%, либо без них (предпочтительнее без, чтобы было лучше видно отличие от КЗ, где %% обязательны). При отсутствии переменной выдается ошибка. Неопределенностей нет.

Вот пример с особенностями (возможно что-то упустил):

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

1: Старый
a = zxc                     -- ок
с = %a%                     -- ок, присвоит значение a
с = a                       -- ок, присвоит строку "a"
a = "zxc asd"               -- ок
a = zxc asd                 -- некорректная запись, вернет  "zxcasd" без пробела
b = StrLen(qwerty)          -- ок
b = StrLen("qwerty")        -- ок
b = StrLen(%a%)             -- ок
b = StrLen(a)               -- ок, вернет "1", длину строки "a"
b = StrLen("qwerty asdf")   -- кавычки все равно обязательны, т.к. пробел
b = StrLen("qw(er)ty,asdf") -- кавычки все равно обязательны, т.к. в строке есть разделители ",()"
b = StrLen(%a% & qwerty)    -- ок

2: Новый
a = "zxc"                -- ок
с = %a%                  -- ок, присвоит значение a
с = a                    -- ок, присвоит значение a
b = StrLen("qwerty")     -- ок
b = StrLen(%a%)          -- ок
b = StrLen(a)            -- ок
b = StrLen(a & "qwerty") -- ок
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Спасибо за подробности, стало куда более понятно.
Loopback писал(а):в командной записи FileExist/ProcessExist в условиях, но она, что очевидно, провалилась. ... (возможно что-то упустил)
Вот это упустил. Как с этим будет в каждом режиме?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Вот это упустил. Как с этим будет в каждом режиме?
Так же, как с любыми другими командами. Но в условиях запись только в ФЗ, "if FileExist name then" убрана, я об этом писал еще в посте с самой первой бетой.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Но в условиях запись только в ФЗ
В формате или режиме?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):В формате или режиме?
Вроде как ФЗ везде используется в контексте формата записи. Причем тут какой-то режим?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback
Так мы говорим не про то, как сейчас (КЗ+ФЗ), а как будет (КЗ/ФЗ) с прагмами, то бишь без скрещивания ужа с ежом.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher писал(а):Так мы говорим не про то, как сейчас (КЗ+ФЗ), а как будет (КЗ/ФЗ) с прагмами
А как будет? Будет точно так же, КЗ+ФЗ. Командный синтаксис никуда не денется. Прагма влияет исключительно на интерпретацию ФЗ.

Я уже вообще перестал понимать, то тут еще непонятно.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Loopback писал(а):Будет точно так же, КЗ+ФЗ.
Т. е. как и сейчас, с любой из прагм?

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

If Not ProcessExist('~/F', '...') Then
Так?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Flasher
Всё верно.
Ответить