Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.
Load сейчас просто неоткуда появляться, я его еще утром убил. Скорее всего у тебя все же какая-то старая версия грузится.
Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22.
Load сейчас просто неоткуда появляться, я его еще утром убил. Скорее всего у тебя все же какая-то старая версия грузится.
Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22.
Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.Loopback писал(а):Скорее всего у тебя все же какая-то старая версия грузится.
С новой версией завелось.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Tweaks тут не причем, думаю, там изменения по модификаторам минимальны. А вот основной плагин я выкладывал утром версию здесь.Flasher писал(а):Tweaks 100% новый
Но вообще, бывают и косяки компиляции, сталкивался с таким не раз.
wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.Loopback писал(а):А вот основной плагин я выкладывал утром версию здесь.
Мда, я ошибся. Load пропал, а на английском ТС крах остался. Только окна с ошибками стали закрываться...
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ну вот попробуй еще версию, если не поможет, то у меня больше нет идей. Может опять 32-битная семерка или еще что.
Не помогло. Придётся забыть про %COMMANDER_LANG%, видимо...
Блин, я же не ту переменную подсовываю. Надо %AUTORUN_TCLANG%. С ней всё в порядке.
И почему в одном случае есть проценты, а в другом нет? И почему не вернуло пустые значения?
Ещё есть проблема с переносом строки. Не работает:
Блин, я же не ту переменную подсовываю. Надо %AUTORUN_TCLANG%. С ней всё в порядке.
Код: Выделить всё
CL = %COMMANDER_LANG%
Set C_L %COMMANDER_LANG%
msgbox '%CL% %C_L%'Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?---------------------------
COMMANDER_LANG %COMMANDER_LANG%
---------------------------
И почему в одном случае есть проценты, а в другом нет? И почему не вернуло пустые значения?
Ещё есть проблема с переносом строки. Не работает:
Код: Выделить всё
If %AUTORUN_TCARCH% = 32 Then _
LoadLibrary Plugins\ScrollTC.dll
If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then _
ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startupЯ бы так не сказал:Loopback писал(а):С вложенными If-ами нет проблем.
Код: Выделить всё
A = 1
B = 2
C = 3
If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех[15] If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех
Undefined command of function name: If
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Перенос съедает пробел перед _, в справке написано.Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел. Но вообще если подумать, разрывать посередине строки или ключевого слова это неправильно, поэтому верну как было, чтобы убирался только _. Единственная проблема - в случае неправильного размещения разрыва никаких сообщений об ошибках сделать не получится.Ещё есть проблема с переносом строки.
Разумеется, это не относится к однострочным If-ам. Я думал это очевидно. Да и какой смысл в такой гирлянде, если можно собрать условие с and?Я бы так не сказал
Я писать не успеваю, при каждом обновлении что-то новенькое.Блин, я же не ту переменную подсовываю.
Хорошо что заработало, но все же, падать не должно при любых ошибках. Интересно, как создавался этот %COMMANDER_LANG% и узнать его содержимое. При его отсутствии я тоже пробовал и тоже было всё норм.
Непринципиально. В условиях с процентами или без - равноценно. и я пробовал оба варианта.Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
Издержки разницы работы старого и нового метода. Еще раз, это непринципиально.И почему в одном случае есть проценты, а в другом нет?
А вот это как раз "благодаря" отсутствию обязательных кавычек. Поскольку в таком варианте неизвестно, что это - переменная или просто текст.И почему не вернуло пустые значения?
Почему это лишний? Если есть, значит, не лишний. На том же vb это нормальная практика, ведь пробел разделяет ключевые слова, чтобы ничего не слилось и работало. Перенос по словам — это же не перенос строки по ширине символов, как в текстовых редаторах/вьюверах.Loopback писал(а):Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел.
Значит, ты меня не понял. Под вложенными я понимал инлайновую матрёшку. Мы же говорили именно об этом в контексте записи if-ов внутри команд.Loopback писал(а):Разумеется, это не относится к однострочным If-ам.
Это же очевидно. Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.Loopback писал(а):Да и какой смысл в такой гирлянде, если можно собрать условие с and?
Ясно, а вот у меня не норм.Loopback писал(а):При его отсутствии я тоже пробовал и тоже было всё норм.
ОК. Вот тебе с апострофами:Loopback писал(а):А вот это как раз "благодаря" отсутствию обязательных кавычек.
Код: Выделить всё
A = '%Empty%'
Set B '%Empty%'
msgbox '%A% %B%'То же самое, только сюда ещё \ затесался.---------------------------
%Empty% \Empty
---------------------------
А вот с наличием значения:
Код: Выделить всё
CL = '%AUTORUN_TCLANG%'
Set C_L '%AUTORUN_TCLANG%'
msgbox '%CL% %C_L%'Код: Выделить всё
---------------------------
%AUTORUN_TCLANG% rus
---------------------------Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Скажем так, лишний при некорректном использовании. Короче проехали, верну чтобы не съедался.Flasher писал(а):Почему это лишний?
В принципе, во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false. Так что стройка лесенок оправдана не всегда.Flasher писал(а):Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.
Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах. Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Здесь ошибки нет. При присваивании правая часть - выражение, и записав здесь '%AUTORUN_TCLANG%' ты присвоил переменной строку с именем переменной, а не значение. A Set - старая команда, где переменные разворачиваются в тексте, поэтому значение вычислилось.Flasher писал(а):Получается только с Set возращается значение.
Правильно:
Код: Выделить всё
CL = %AUTORUN_TCLANG%
CL = AUTORUN_TCLANG
Set C_L '%AUTORUN_TCLANG%'
Set C_L %AUTORUN_TCLANG%
У меня %Empty% %Empty%, как и ожидается.Flasher писал(а):только сюда ещё \ затесался
Т. е. vb, по-твоему, неполноценный?Loopback писал(а):во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false.
Ну, если с And там работают прерывания, то ему это и не нужно.Loopback писал(а):Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах.
Это я давно заметил, ещё и с учётом твоей былой активности в скриптовой теме.Loopback писал(а):Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
В общем, принял к сведению, if-матрёшка тут не нужна.
Я согласен, но я лишь ориентировался на твои слова:Loopback писал(а):ты присвоил переменной строку с именем переменной
Loopback писал(а):"благодаря" отсутствию обязательных кавычек
Код: Выделить всё
CL = AUTORUN_TCLANGНу, не знаю. У меня так. И почему ожидается-то, если вопрос был о пустых значениях?Loopback писал(а):У меня %Empty% %Empty%, как и ожидается.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ок, не так выразился. Конечно, только одна эта фича не делает язык полноценным или нет. Но конкретно в VB этого действительно оказывается нет.Flasher писал(а):Т. е. vb, по-твоему, неполноценный?
Есть, для and и or.Flasher писал(а):Ну, если с And там работают прерывания, то ему это и не нужно.
Обязательных кавычек для строк, а не всего выражения. И уж тем более не переменных. И только в функциональной записи.Flasher писал(а):Я согласен, но я лишь ориентировался на твои слова:
Код: Выделить всё
Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
А в такой проблем нет:
IniRead('~/R', %COMMANDER_INI%, "Configuration", "LanguageIni")
IniRead('~/R', %COMMANDER_INI%, 'Configuration', 'LanguageIni')
IniRead('~/R', %COMMANDER_INI%, 'Configuration', "LanguageIni")
и т.д.
Теперь уже и не знаю. Возможно откачу назад, поскольку как я уже писал, сейчас невозможно отличить переменную от простой строки. Либо переключение прагмой.Flasher писал(а):О, а где ещё беспроцентный вариант можно использовать? В командах, например.
В какой-то момент возникла какая-то проблема, поэтому я и разрешил переменные без %. Сейчас их можно использовать в любых выражениях - условиях, новом присваивании, параметрах функций и т.д. В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'. Обязательность %% сохраняется при прямом использовании в командной записи.
Может какой-то баг, но у меня он не проявляется.Flasher писал(а):У меня так. И почему ожидается-то, если вопрос был о пустых значениях?
Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это. Возвращается имя переменной, но так было и в предыдущих версиях Autorun.
Loopback
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте
.
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
2. Переменная %AUTORUN_TCHANDLE% вернула хэндл 1441850. А функция в AutoIt WinGetHandle("[CLASS:TTOTAL_CMD]") вернула хэндл 0x000000000016003A. В чём разница между этими двумя хэндлами? Просто я окошки с подсказками для F-кнопок сделал себе в AutoIt, и они центрируются по окну, хэндл которого укажешь. Так со 2м хэндлом всё правильно центрируется, а с 1м, авторановским, улетает в правый угол экрана.
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Код: Выделить всё
ControlSetMouseAction /R 17 /B:1 MsgBox(%AUTORUN_TCHANDLE%)Отвечаю не глядяyozhik писал(а):то не читайте
Этот вопрос как раз весьма интересный. Не считая ошибки, что 17 должна идти после /B:1, то да, не работает, здесь только старый вариант. И как прикрутить новый к функциям в плагинах (и надо ли вообще - это единственная такая функция, вызывающая какие-то другие команды) - это еще надо подумать.yozhik писал(а):Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Но в принципе если очень надо, сейчас можно выполнить любое новое выражение через Eval:
Код: Выделить всё
ControlSetMouseAction /R /B:1 17 Eval 'MsgBox(%AUTORUN_TCHANDLE%)'
Тут как раз всё просто: плагин возвращает значение в десятичной системе, Autoit - в шестнадцатеричной. В Autoit из десятичного в шестнадцатиричный вид можно перевести функцией Hex.yozhik писал(а):В чём разница между этими двумя хэндлами?
Ну, для таких как я надо, наверное. Потому что единообразие логики помогает пониманию и запоминанию. А множество исключений им не способствуют. А если у человека нет специфического опыта, то ему трудно отличить свои ошибки от ошибок программы. В результате тратишь намного больше времени на изучение. И есть опасность на полпути устать и бросить, недоразобравшись.Loopback писал(а):и надо ли вообще
В том то и дело, что они не «какие-то», а самые что ни на есть главные. И в справке к плагину к ним просто отсылка в главный раздел. Мне бы и в голову не пришло, что одна и та же команда в рамках одного и того же сценария может иметь различия в синтаксисе. Вот такая логика людей неискушённыхLoopback писал(а):вызывающая какие-то другие команды
Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти послеLoopback писал(а):17 должна идти после /B:1
Потом-то уже стало понятно.Loopback писал(а):Обязательных кавычек для строк, а не всего выражения.
Код: Выделить всё
Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)[cut="Хотя с ним другая проблема возникла:"]
Код: Выделить всё
# Alt+ПКМ по главному меню = обновление текущей локализации:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_Lang IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
# ПКМ по главному меню = переключение между русским и английским языками:
ControlSetMouseAction /R /H:64 0 ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef if(tcini(Configuration,LanguageIni,`WCMD_RUS.LNG`),tem(em_Lang),tem(`em_Lang Wcmd_rus.lng`))'Дай, думаю, проверю:
Код: Выделить всё
ControlSetMouseAction /R /K:A /H:64 0 %"MsgBox('Alt+ПКМ')"
ControlSetMouseAction /R /H:64 0 %"MsgBox('ПКМ')"Код: Выделить всё
# Shift+ЛКМ по вкладкам = переключение на первую вкладку в соотв. панели:
ControlSetMouseAction /L /K:S 26 SendCommand 5201
ControlSetMouseAction /L /K:S 27 SendCommand 5301Как это всё понимать?
Ух ты. Понял.Loopback писал(а):В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'.
Так нужно отличать. Мы же можем подставлять их в строку как в случае с переменными среды.Loopback писал(а):Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это.
Из старого примера TCFS2.exe' '/ef "tem(`em_Lang %LNG%`)"' , где вместо %LNG% ожидается пустое значения для правильного срабатывания.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.