Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 112, 113, 114 ... 133, 134, 135  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Wed Jun 03, 2020 23:41    Post subject: Reply with quote

Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.

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

Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 00:03    Post subject: Reply with quote

Loopback wrote:
Скорее всего у тебя все же какая-то старая версия грузится.
Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.

С новой версией завелось.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 00:13    Post subject: Reply with quote

Flasher wrote:
Tweaks 100% новый

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

Но вообще, бывают и косяки компиляции, сталкивался с таким не раз.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 00:21    Post subject: Reply with quote

Loopback wrote:
А вот основной плагин я выкладывал утром версию здесь.
wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.

Мда, я ошибся. Load пропал, а на английском ТС крах остался. Только окна с ошибками стали закрываться...
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 01:07    Post subject: Reply with quote

Ну вот попробуй еще версию, если не поможет, то у меня больше нет идей. Может опять 32-битная семерка или еще что.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 01:11    Post subject: Reply with quote

Не помогло. Придётся забыть про %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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 02:02    Post subject: Reply with quote

Quote:
Ещё есть проблема с переносом строки.

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

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

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

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

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

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

Quote:

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

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

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

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

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

А вот это как раз "благодаря" отсутствию обязательных кавычек. Поскольку в таком варианте неизвестно, что это - переменная или просто текст.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 02:16    Post subject: Reply with quote

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 возращается значение.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 03:02    Post subject: Reply with quote

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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 04:12    Post subject: Reply with quote

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%, как и ожидается.
Ну, не знаю. У меня так. И почему ожидается-то, если вопрос был о пустых значениях?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 13:05    Post subject: Reply with quote

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
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 181

Post (Separately) Posted: Thu Jun 04, 2020 16:56    Post subject: Reply with quote

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м, авторановским, улетает в правый угол экрана.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1290

Post (Separately) Posted: Thu Jun 04, 2020 17:54    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 181

Post (Separately) Posted: Thu Jun 04, 2020 21:48    Post subject: Reply with quote

Loopback wrote:
и надо ли вообще

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

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

Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти после Embarassed .
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 04, 2020 23:23    Post subject: Reply with quote

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% ожидается пустое значения для правильного срабатывания.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 112, 113, 114 ... 133, 134, 135  Next
Page 113 of 135

 
Jump to:  
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