Autorun
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 112, 113, 114 ... 131, 132, 133  Next  :| |:
Total Commander -> Плагины Total Commander

#1681:  Author: Loopback PostPosted: Wed Jun 03, 2020 23:41
    —
Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.

Load сейчас просто неоткуда появляться, я его еще утром убил. Скорее всего у тебя все же какая-то старая версия грузится.

Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22.

#1682:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 00:03
    —
Loopback wrote:
Скорее всего у тебя все же какая-то старая версия грузится.
Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.

С новой версией завелось.

#1683:  Author: Loopback PostPosted: Thu Jun 04, 2020 00:13
    —
Flasher wrote:
Tweaks 100% новый

Tweaks тут не причем, думаю, там изменения по модификаторам минимальны. А вот основной плагин я выкладывал утром версию здесь.

Но вообще, бывают и косяки компиляции, сталкивался с таким не раз.

#1684:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 00:21
    —
Loopback wrote:
А вот основной плагин я выкладывал утром версию здесь.
wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.

Мда, я ошибся. Load пропал, а на английском ТС крах остался. Только окна с ошибками стали закрываться...

#1685:  Author: Loopback PostPosted: Thu Jun 04, 2020 01:07
    —
Ну вот попробуй еще версию, если не поможет, то у меня больше нет идей. Может опять 32-битная семерка или еще что.

#1686:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 01:11
    —
Не помогло. Придётся забыть про %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

#1687:  Author: Loopback PostPosted: Thu Jun 04, 2020 02:02
    —
Quote:
Ещё есть проблема с переносом строки.

Перенос съедает пробел перед _, в справке написано.Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел. Но вообще если подумать, разрывать посередине строки или ключевого слова это неправильно, поэтому верну как было, чтобы убирался только _. Единственная проблема - в случае неправильного размещения разрыва никаких сообщений об ошибках сделать не получится.

Quote:
Я бы так не сказал

Разумеется, это не относится к однострочным If-ам. Я думал это очевидно. Да и какой смысл в такой гирлянде, если можно собрать условие с and?

Quote:
Блин, я же не ту переменную подсовываю.

Я писать не успеваю, при каждом обновлении что-то новенькое.

Хорошо что заработало, но все же, падать не должно при любых ошибках. Интересно, как создавался этот %COMMANDER_LANG% и узнать его содержимое. При его отсутствии я тоже пробовал и тоже было всё норм.

Quote:

Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?

Непринципиально. В условиях с процентами или без - равноценно. и я пробовал оба варианта.

Quote:
И почему в одном случае есть проценты, а в другом нет?

Издержки разницы работы старого и нового метода. Еще раз, это непринципиально.

Quote:
И почему не вернуло пустые значения?

А вот это как раз "благодаря" отсутствию обязательных кавычек. Поскольку в таком варианте неизвестно, что это - переменная или просто текст.

#1688:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 02:16
    —
Loopback wrote:
Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел.
Почему это лишний? Если есть, значит, не лишний. На том же vb это нормальная практика, ведь пробел разделяет ключевые слова, чтобы ничего не слилось и работало. Перенос по словам — это же не перенос строки по ширине символов, как в текстовых редаторах/вьюверах. Wink

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 возращается значение.

#1689:  Author: Loopback PostPosted: Thu Jun 04, 2020 03:02
    —
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%, как и ожидается.

#1690:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 04:12
    —
Loopback wrote:
во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false.
Т. е. vb, по-твоему, неполноценный?

Loopback wrote:
Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах.
Ну, если с And там работают прерывания, то ему это и не нужно.
Loopback wrote:
Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Это я давно заметил, ещё и с учётом твоей былой активности в скриптовой теме. Wink
В общем, принял к сведению, if-матрёшка тут не нужна.

Loopback wrote:
ты присвоил переменной строку с именем переменной
Я согласен, но я лишь ориентировался на твои слова:
Loopback wrote:
"благодаря" отсутствию обязательных кавычек

Code:
CL = AUTORUN_TCLANG
О, а где ещё беспроцентный вариант можно использовать? В командах, например.

Loopback wrote:
У меня %Empty% %Empty%, как и ожидается.
Ну, не знаю. У меня так. И почему ожидается-то, если вопрос был о пустых значениях?

#1691:  Author: Loopback PostPosted: Thu Jun 04, 2020 13:05
    —
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.

#1692:  Author: yozhik PostPosted: Thu Jun 04, 2020 16:56
    —
Loopback
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте Confused .
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Code:
ControlSetMouseAction /R 17 /B:1 MsgBox(%AUTORUN_TCHANDLE%)

2. Переменная %AUTORUN_TCHANDLE% вернула хэндл 1441850. А функция в AutoIt WinGetHandle("[CLASS:TTOTAL_CMD]") вернула хэндл 0x000000000016003A. В чём разница между этими двумя хэндлами? Просто я окошки с подсказками для F-кнопок сделал себе в AutoIt, и они центрируются по окну, хэндл которого укажешь. Так со 2м хэндлом всё правильно центрируется, а с 1м, авторановским, улетает в правый угол экрана.

#1693:  Author: Loopback PostPosted: Thu Jun 04, 2020 17:54
    —
yozhik wrote:
то не читайте

Отвечаю не глядя Very Happy

yozhik wrote:
Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.

Этот вопрос как раз весьма интересный. Не считая ошибки, что 17 должна идти после /B:1, то да, не работает, здесь только старый вариант. И как прикрутить новый к функциям в плагинах (и надо ли вообще - это единственная такая функция, вызывающая какие-то другие команды) - это еще надо подумать.

Но в принципе если очень надо, сейчас можно выполнить любое новое выражение через Eval:

Code:

ControlSetMouseAction /R /B:1 17 Eval 'MsgBox(%AUTORUN_TCHANDLE%)'


yozhik wrote:
В чём разница между этими двумя хэндлами?

Тут как раз всё просто: плагин возвращает значение в десятичной системе, Autoit - в шестнадцатеричной. В Autoit из десятичного в шестнадцатиричный вид можно перевести функцией Hex.

#1694:  Author: yozhik PostPosted: Thu Jun 04, 2020 21:48
    —
Loopback wrote:
и надо ли вообще

Ну, для таких как я надо, наверное. Потому что единообразие логики помогает пониманию и запоминанию. А множество исключений им не способствуют. А если у человека нет специфического опыта, то ему трудно отличить свои ошибки от ошибок программы. В результате тратишь намного больше времени на изучение. И есть опасность на полпути устать и бросить, недоразобравшись.
Loopback wrote:
вызывающая какие-то другие команды

В том то и дело, что они не «какие-то», а самые что ни на есть главные. И в справке к плагину к ним просто отсылка в главный раздел. Мне бы и в голову не пришло, что одна и та же команда в рамках одного и того же сценария может иметь различия в синтаксисе. Вот такая логика людей неискушённых Smile .
Loopback wrote:
17 должна идти после /B:1

Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти после Embarassed .

#1695:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 23:23
    —
Loopback wrote:
Обязательных кавычек для строк, а не всего выражения.
Потом-то уже стало понятно.
Code:
Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
Почему проблема-то? Это справочный пример.
 Хотя с ним другая проблема возникла:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать. Confused

Дай, думаю, проверю:
Code:
ControlSetMouseAction /R /K:A /H:64 0 %"MsgBox('Alt+ПКМ')"
ControlSetMouseAction /R /H:64 0 %"MsgBox('ПКМ')"
Но вместо того, чтобы выполняться по кликам на гл. меню, окна стали появляться сами на этапе запуска ТС и только. Shocked
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% ожидается пустое значения для правильного срабатывания.



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 112, 113, 114 ... 131, 132, 133  Next  :| |:
Page 113 of 133

Powered by phpBB © 2001, 2005 phpBB Group