View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Wed Jun 03, 2020 23:41 Post subject: |
|
|
Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.
Load сейчас просто неоткуда появляться, я его еще утром убил. Скорее всего у тебя все же какая-то старая версия грузится.
Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 00:03 Post subject: |
|
|
Loopback wrote: | Скорее всего у тебя все же какая-то старая версия грузится. | Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.
С новой версией завелось. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 00:13 Post subject: |
|
|
Flasher wrote: | Tweaks 100% новый |
Tweaks тут не причем, думаю, там изменения по модификаторам минимальны. А вот основной плагин я выкладывал утром версию здесь.
Но вообще, бывают и косяки компиляции, сталкивался с таким не раз. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 00:21 Post subject: |
|
|
Loopback wrote: | А вот основной плагин я выкладывал утром версию здесь. | wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.
Мда, я ошибся. Load пропал, а на английском ТС крах остался. Только окна с ошибками стали закрываться... _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 01:07 Post subject: |
|
|
Ну вот попробуй еще версию, если не поможет, то у меня больше нет идей. Может опять 32-битная семерка или еще что. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 01:11 Post subject: |
|
|
Не помогло. Придётся забыть про %COMMANDER_LANG%, видимо...
Блин, я же не ту переменную подсовываю. Надо %AUTORUN_TCLANG%. С ней всё в порядке.
Code: | CL = %COMMANDER_LANG%
Set C_L %COMMANDER_LANG%
msgbox '%CL% %C_L%' |
Quote: | ---------------------------
COMMANDER_LANG %COMMANDER_LANG%
--------------------------- | Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
И почему в одном случае есть проценты, а в другом нет? И почему не вернуло пустые значения?
Ещё есть проблема с переносом строки. Не работает:
Code: | 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 wrote: | С вложенными If-ами нет проблем. | Я бы так не сказал:
Code: | A = 1
B = 2
C = 3
If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех |
Quote: | [15] If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех
Undefined command of function name: If |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 02:02 Post subject: |
|
|
Quote: | Ещё есть проблема с переносом строки. |
Перенос съедает пробел перед _, в справке написано.Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел. Но вообще если подумать, разрывать посередине строки или ключевого слова это неправильно, поэтому верну как было, чтобы убирался только _. Единственная проблема - в случае неправильного размещения разрыва никаких сообщений об ошибках сделать не получится.
Quote: | Я бы так не сказал |
Разумеется, это не относится к однострочным If-ам. Я думал это очевидно. Да и какой смысл в такой гирлянде, если можно собрать условие с and?
Quote: | Блин, я же не ту переменную подсовываю. |
Я писать не успеваю, при каждом обновлении что-то новенькое.
Хорошо что заработало, но все же, падать не должно при любых ошибках. Интересно, как создавался этот %COMMANDER_LANG% и узнать его содержимое. При его отсутствии я тоже пробовал и тоже было всё норм.
Quote: |
Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
|
Непринципиально. В условиях с процентами или без - равноценно. и я пробовал оба варианта.
Quote: | И почему в одном случае есть проценты, а в другом нет? |
Издержки разницы работы старого и нового метода. Еще раз, это непринципиально.
Quote: | И почему не вернуло пустые значения? |
А вот это как раз "благодаря" отсутствию обязательных кавычек. Поскольку в таком варианте неизвестно, что это - переменная или просто текст. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 02:16 Post subject: |
|
|
Loopback wrote: | Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел. | Почему это лишний? Если есть, значит, не лишний. На том же vb это нормальная практика, ведь пробел разделяет ключевые слова, чтобы ничего не слилось и работало. Перенос по словам — это же не перенос строки по ширине символов, как в текстовых редаторах/вьюверах.
Loopback wrote: | Разумеется, это не относится к однострочным If-ам. | Значит, ты меня не понял. Под вложенными я понимал инлайновую матрёшку. Мы же говорили именно об этом в контексте записи if-ов внутри команд.
Loopback wrote: | Да и какой смысл в такой гирлянде, если можно собрать условие с and? | Это же очевидно. Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.
Loopback wrote: | При его отсутствии я тоже пробовал и тоже было всё норм. | Ясно, а вот у меня не норм.
Loopback wrote: | А вот это как раз "благодаря" отсутствию обязательных кавычек. | ОК. Вот тебе с апострофами:
Code: | A = '%Empty%'
Set B '%Empty%'
msgbox '%A% %B%' |
Quote: | ---------------------------
%Empty% \Empty
--------------------------- | То же самое, только сюда ещё \ затесался.
А вот с наличием значения:
Code: | CL = '%AUTORUN_TCLANG%'
Set C_L '%AUTORUN_TCLANG%'
msgbox '%CL% %C_L%' |
Code: | ---------------------------
%AUTORUN_TCLANG% rus
--------------------------- | Получается только с Set возращается значение. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 03:02 Post subject: |
|
|
Flasher wrote: | Почему это лишний? |
Скажем так, лишний при некорректном использовании. Короче проехали, верну чтобы не съедался.
Flasher wrote: | Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.
|
В принципе, во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false. Так что стройка лесенок оправдана не всегда.
Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах. Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Flasher wrote: | Получается только с Set возращается значение. |
Здесь ошибки нет. При присваивании правая часть - выражение, и записав здесь '%AUTORUN_TCLANG%' ты присвоил переменной строку с именем переменной, а не значение. A Set - старая команда, где переменные разворачиваются в тексте, поэтому значение вычислилось.
Правильно:
Code: |
CL = %AUTORUN_TCLANG%
CL = AUTORUN_TCLANG
Set C_L '%AUTORUN_TCLANG%'
Set C_L %AUTORUN_TCLANG%
|
Flasher wrote: | только сюда ещё \ затесался |
У меня %Empty% %Empty%, как и ожидается. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 04:12 Post subject: |
|
|
Loopback wrote: | во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false. | Т. е. vb, по-твоему, неполноценный?
Loopback wrote: | Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах. | Ну, если с And там работают прерывания, то ему это и не нужно.
Loopback wrote: | Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же. | Это я давно заметил, ещё и с учётом твоей былой активности в скриптовой теме.
В общем, принял к сведению, if-матрёшка тут не нужна.
Loopback wrote: | ты присвоил переменной строку с именем переменной | Я согласен, но я лишь ориентировался на твои слова: Loopback wrote: | "благодаря" отсутствию обязательных кавычек |
Code: | CL = AUTORUN_TCLANG | О, а где ещё беспроцентный вариант можно использовать? В командах, например.
Loopback wrote: | У меня %Empty% %Empty%, как и ожидается. | Ну, не знаю. У меня так. И почему ожидается-то, если вопрос был о пустых значениях? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 13:05 Post subject: |
|
|
Flasher wrote: | Т. е. vb, по-твоему, неполноценный? |
Ок, не так выразился. Конечно, только одна эта фича не делает язык полноценным или нет. Но конкретно в VB этого действительно оказывается нет.
Flasher wrote: | Ну, если с And там работают прерывания, то ему это и не нужно. |
Есть, для and и or.
Flasher wrote: | Я согласен, но я лишь ориентировался на твои слова: |
Обязательных кавычек для строк, а не всего выражения. И уж тем более не переменных. И только в функциональной записи.
Code: |
Проблема в такой записи:
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 wrote: | О, а где ещё беспроцентный вариант можно использовать? В командах, например. |
Теперь уже и не знаю. Возможно откачу назад, поскольку как я уже писал, сейчас невозможно отличить переменную от простой строки. Либо переключение прагмой.
В какой-то момент возникла какая-то проблема, поэтому я и разрешил переменные без %. Сейчас их можно использовать в любых выражениях - условиях, новом присваивании, параметрах функций и т.д. В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'. Обязательность %% сохраняется при прямом использовании в командной записи.
Flasher wrote: | У меня так. И почему ожидается-то, если вопрос был о пустых значениях? |
Может какой-то баг, но у меня он не проявляется.
Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это. Возвращается имя переменной, но так было и в предыдущих версиях Autorun. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 181
|
(Separately) Posted: Thu Jun 04, 2020 16:56 Post subject: |
|
|
Loopback
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте .
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Code: | ControlSetMouseAction /R 17 /B:1 MsgBox(%AUTORUN_TCHANDLE%) |
2. Переменная %AUTORUN_TCHANDLE% вернула хэндл 1441850. А функция в AutoIt WinGetHandle("[CLASS:TTOTAL_CMD]") вернула хэндл 0x000000000016003A. В чём разница между этими двумя хэндлами? Просто я окошки с подсказками для F-кнопок сделал себе в AutoIt, и они центрируются по окну, хэндл которого укажешь. Так со 2м хэндлом всё правильно центрируется, а с 1м, авторановским, улетает в правый угол экрана. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1290
|
(Separately) Posted: Thu Jun 04, 2020 17:54 Post subject: |
|
|
yozhik wrote: | то не читайте |
Отвечаю не глядя
yozhik wrote: | Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает. |
Этот вопрос как раз весьма интересный. Не считая ошибки, что 17 должна идти после /B:1, то да, не работает, здесь только старый вариант. И как прикрутить новый к функциям в плагинах (и надо ли вообще - это единственная такая функция, вызывающая какие-то другие команды) - это еще надо подумать.
Но в принципе если очень надо, сейчас можно выполнить любое новое выражение через Eval:
Code: |
ControlSetMouseAction /R /B:1 17 Eval 'MsgBox(%AUTORUN_TCHANDLE%)'
|
yozhik wrote: | В чём разница между этими двумя хэндлами? |
Тут как раз всё просто: плагин возвращает значение в десятичной системе, Autoit - в шестнадцатеричной. В Autoit из десятичного в шестнадцатиричный вид можно перевести функцией Hex. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 181
|
(Separately) Posted: Thu Jun 04, 2020 21:48 Post subject: |
|
|
Loopback wrote: | и надо ли вообще |
Ну, для таких как я надо, наверное. Потому что единообразие логики помогает пониманию и запоминанию. А множество исключений им не способствуют. А если у человека нет специфического опыта, то ему трудно отличить свои ошибки от ошибок программы. В результате тратишь намного больше времени на изучение. И есть опасность на полпути устать и бросить, недоразобравшись.
Loopback wrote: | вызывающая какие-то другие команды |
В том то и дело, что они не «какие-то», а самые что ни на есть главные. И в справке к плагину к ним просто отсылка в главный раздел. Мне бы и в голову не пришло, что одна и та же команда в рамках одного и того же сценария может иметь различия в синтаксисе. Вот такая логика людей неискушённых .
Loopback wrote: | 17 должна идти после /B:1 |
Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти после . |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 04, 2020 23:23 Post subject: |
|
|
Loopback wrote: | Обязательных кавычек для строк, а не всего выражения. | Потом-то уже стало понятно.
Code: | Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni) | Почему проблема-то? Это справочный пример.
Хотя с ним другая проблема возникла: Code: | # 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`))' |
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать.
Дай, думаю, проверю:
Code: | ControlSetMouseAction /R /K:A /H:64 0 %"MsgBox('Alt+ПКМ')"
ControlSetMouseAction /R /H:64 0 %"MsgBox('ПКМ')" | Но вместо того, чтобы выполняться по кликам на гл. меню, окна стали появляться сами на этапе запуска ТС и только.
Code: | # Shift+ЛКМ по вкладкам = переключение на первую вкладку в соотв. панели:
ControlSetMouseAction /L /K:S 26 SendCommand 5201
ControlSetMouseAction /L /K:S 27 SendCommand 5301 | Эти команды вообще без шифта стали работать, т. е. я не могу теперь активировать вкладку простым кликом.
Как это всё понимать?
Loopback wrote: | В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'. | Ух ты. Понял.
Loopback wrote: | Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это. | Так нужно отличать. Мы же можем подставлять их в строку как в случае с переменными среды.
Из старого примера TCFS2.exe' '/ef "tem(`em_Lang %LNG%`)"' , где вместо %LNG% ожидается пустое значения для правильного срабатывания. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|