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 ... 101, 102, 103 ... 132, 133, 134  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



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

Post (Separately) Posted: Sun Mar 22, 2020 17:58    Post subject: Reply with quote

Loopback wrote:
Если речь про инкремент результата WM_USER+1000, то да, можно.
Речь про все текущие в момент кликов хэндлы. И текущий инкремент для 9 текущих пар.
Ну, и про 0 для активного окна ТС безотносительно положения указателя мыши ты не ответил.

Loopback wrote:
ввести виртуальные идентификаторы типа 3 и 4, т.е. например для панели табов: 100 - активная панель табов, 101 - неактивная
Не понял. Какая связь у 3/4 со 100/101 ?
Я думал о добавке 9 индексов, но сперва мне такой вариант показался избыточным. И тебе тогда переменную с индексом придётся отдельно обрабатывать, а не подставлять сразу заданный. Впрочем, хозяин — барин, главное, чтобы работало.

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



Joined: 07 Sep 2009
Posts: 1283

Post (Separately) Posted: Sun Mar 22, 2020 20:31    Post subject: Reply with quote

Бета-версия 2.0.10

+ Tweaks: добавлены новые виртуальные идентификаторы для задания пар активных/неактивных элементов
+ Tweaks: добавлена поддержка зон главного окна (заголовок, меню и т.д.)
+ в выражениях добавлена прямая поддержка команд, возвращающих выражения, в виде: StrPos(["switch",] str, substr)

На этом с обновлением выражений, полагаю, можно закончить, лучше в этом синтаксисе на этом "движке" уже ничего с ними не сделать. Такой путь развития очень напомнил AHK - такая же лапша из команд и функций, в разных условиях задаваемых разными способами (одна из причин, почему я не люблю AHK первой версии). Ну тут уже ничего не поделаешь без полной переделки с потерей совместимости.

Вкратце выглядит сейчас всё так:

Code:

# 1. При использовании выражений в параметрах, можно использовать % непосредственно перед кавычками.
# Содержимое строки будет вычисляться и результат передаваться в параметр.
Set sl 1000
Sleep %'%sl%+500'
# => 1500

# 2. Внутри кавычек для текстовых констант можно использовать кавычки другого типа
Set sl 1000
StrLen var %'"Строка_" & 1'
# var => Строка_1

# 3. В выражениях можно использовать команды Autorun, возвращающие значения,
# в виде StrPos(["switch",] str, substr).
# При таком использовании первый параметр (переменная) не нужен.
# Команды могут быть вложенными.
Set zz "  abcdefgh"
MsgBox %"StrLeft(StrTrim(%zz%), 3) & '-' & StrPos(%zz%, 'd') & '-' & (StrPos('123456789', '5'))" "Expr"
# => abc-6-5

# 4. Если в команде ужно использовать переключатели, их можно передать в первом параметре в кавычках через пробел, первым символом в строке должен идти ~, вторым /: "~/S1 /S2" и т.д.
Set zz "AbCdEfxQWERTY"
MsgBox %"StrPos('~/S', %zz%, 'x')" "Case-sens"
# => 7

# 5. В условиях "окавычивать" выражения не нужно, выражения вычисляются по умолчанию
Set zz "snsddxff"
if StrPos('~/S', %zz%, 'x') = 6 then
  MsgBox "Yes"
endif


Flasher wrote:
Речь про все текущие в момент кликов хэндлы. И текущий инкремент для 9 текущих пар.

Текущие получались уже в прошлой версии.

В общем, я уже утомился препираться по этому вопросу. Опять больше времени трачу на развернутые ответы, чем на собственно программирование.

Flasher wrote:
Ну, и про 0 для активного окна ТС безотносительно положения указателя мыши ты не ответил.

Есть, можно назначать обработку на разные зоны.

Flasher wrote:
Я думал о добавке 9 индексов, но сперва мне такой вариант показался избыточным. И тебе тогда переменную с индексом придётся отдельно обрабатывать, а не подставлять сразу заданный. Впрочем, хозяин — барин, главное, чтобы работало.

Не всегда то, что кажется избыточным, таковым является: c точки зрения скорости и простоты обработки этот вариант лучший. И не всегда то, что кажется простым, просто на самом деле (это про "переменную" @).
Сейчас код переключения вкладок такой:
Quote:
#10017 - активная панель вкладок
ControlSetMouseAction /W:R 10017 CMD 3005
ControlSetMouseAction /W:F 10017 CMD 3006

Flasher wrote:
У меня и затенения не происходит. А там не осветление с вдавленностью? Я так понял на скриншоте это ===Separator===.

Вид зависит от темы, на классической вдавленный серый текст, в десятке просто серый. В любом случае пункт неактивный.
Я не знаю, почему у тебя не затеняет. Может меню не видимо при запуске ТС? В таком случае помочь ничем нельзя.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Mar 23, 2020 00:13    Post subject: Reply with quote

Loopback wrote:
+ в выражениях добавлена прямая поддержка команд, возвращающих выражения, в виде: StrPos(["switch",] str, substr)
Да ладно?! Surprised Опять 7 лет, но уже сделал то, что категорически не хотел делать. Shocked
Loopback wrote:
Один раз я такое исключение уже сделал, когда добавил функции, которые можно использовать в выражениях (вариант, кстати, очень ограниченный). Больше таких ошибок делать не буду.
...
Вычислений на месте тоже не будет. Отдельная конкатенация в Autorun вообще не нужна, переменные разворачиваются в тексте.
...
Это бессмысленная трата времени и нагромождение кучи кода, поскольку имеющийся парсер принципиально не может решить задачу работы с ними. А ради чего? Ради нескольких функций, которые будут использоваться в лучшем случае пару раз на скрипт?
...
Угу, т.е. я сейчас начну переписывать с нуля парсер, только чтобы сделать красиво строчные функции? Здорово придумано Very Happy
...
Т.е. под каждый вид функционала свой парсер. Нет, это не вариант. Всё должно обрабатываться единообразно.
Рад, что не сдержал обещания и явно подобрел с возрастом. Smile

Loopback wrote:
Вкратце выглядит сейчас всё так:
Это круто. Удобно. Потестирую.

Loopback wrote:
Текущие получались уже в прошлой версии.
Прекрасно. )

Loopback wrote:
Есть, можно назначать обработку на разные зоны.
Без /H берёт только клиентскую часть, а хотелось бы всё окно. Но желательно, если это возможно, и за его пределами, т. е. чтобы клики с клавишными модификаторами не переключались на окно под указателем, как если бы мы жали только клавишные хоткеи. Или это сложно?
И возможность комбинировать зоны по сумме флагов тоже не помешала бы. Т. е. не 1, 2, 3, ..., 20, а 1, 2, 4, 16 ... как для ключей ini (c вычислением по логическому "И"). В таком виде /H:1 /H:2 пока тоже не работает.
А с /R так и не вышло что-то сделать?:
Code:
ControlSetMouseAction /R /H:2 /K:C 0 CMD 321

Loopback wrote:
c точки зрения скорости и простоты обработки этот вариант лучший.
ОК. А можно объяснить, почему такие странные числа (10001-10018) выбраны?

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



Joined: 07 Sep 2009
Posts: 1283

Post (Separately) Posted: Mon Mar 23, 2020 01:25    Post subject: Reply with quote

Flasher wrote:
Опять 7 лет, но уже сделал то, что категорически не хотел делать.

Ну, наверно лучше не обещать, но сделать, чем наоборот? Wink

Да, не планировалось. Но эти вычисления с /С потянули за собой столько всего... Что проще оказалось пару вечеров посидеть с парсером выражений. Мне и сейчас не особо нравится, как всё реализовано, но переделывать с нуля явно сложнее. Хотя иногда и хочется Smile

Flasher wrote:
Без /H берёт только клиентскую часть, а хотелось бы всё окно. Но желательно, если это возможно, и за его пределами, т. е. чтобы клики с клавишными модификаторами не переключались на окно под указателем, как если бы мы жали только клавишные хоткеи. Или это сложно?

Без /H оно вообще не планировалось и сейчас там нечто неопределенное получается. Но может быть можно окно и целиком задействовать.

Для перехвата за пределами окна приложения, насколько я понимаю, нужен глобальный хук. Это уже выходит за пределы назначения плагина, делать его не планируется.

Flasher wrote:
И возможность комбинировать зоны по сумме флагов тоже не помешала бы. Т. е. не 1, 2, 3, ..., 20, а 1, 2, 4, 16 ... как для ключей ini (c вычислением по логическому "И"). В таком виде /H:1 /H:2 пока тоже не работает.

Эти флаги напрямую устанавливаются. И они не комбинируются. Наверно можно и сделать, правда тогда придется уйти от прямого задания индекса зоны. Понять бы зачем.
Flasher wrote:
А с /R так и не вышло что-то сделать?:

Если про подавление меню - нет.
Flasher wrote:
ОК. А можно объяснить, почему такие странные числа (10001-10018) выбраны?

Честно - с потолка. Ну вдруг Кристиан еще что-нибудь надумает сделать. Это чтобы потенциально не пересечься. Хотя и этот выбор не дает гарантий, конечно.
Flasher wrote:
Может, это связано с тем, что в заголовках присутствуют юникодные символы (типа как под 3-м пунктом)?

Не знаю, но сомневаюсь. Сравнение производится элементарно - из начала текста берется количество символов = длине маркера и сравнивается.

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



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

Post (Separately) Posted: Mon Mar 23, 2020 02:09    Post subject: Reply with quote

Loopback wrote:
Ну, наверно лучше не обещать, но сделать, чем наоборот?
Ну и между "не обещать" и "утвердительно обещать не делать" знак равенства не поставишь. Wink

Loopback wrote:
Хотя иногда и хочется
Понимаю тебя. Ты не раз этот момент по всем трём своим суперплагинам затрагивал.

Loopback wrote:
Но может быть можно окно и целиком задействовать.
Хотелось бы.

Loopback wrote:
нужен глобальный хук. Это уже выходит за пределы назначения плагина
Ясно. Не так страшно. Мне в основном это пригодилось бы в ситуации, когда указатель случайно оказывается на всплывающих панелях (таскбар, TLB). С другой стороны, без глобального хука, видимо, ситуацию с /X1|2 не исправить.

Loopback wrote:
Наверно можно и сделать, правда тогда придется уйти от прямого задания индекса зоны. Понять бы зачем.
Ну как зачем. Допустим:
• Заголовок + кн. системного меню + кнопки управления
• Клиентская область + разделитель панелей + главное меню
Да и для контролов такое точно не помешает (например, все компоненты источника или получателя). Можно в перечислении через запятую или вертикальную черту, если не суммой делать.

Loopback wrote:
Если про подавление меню - нет.
MVV точно знает как быстро подавлять отрисовку (в своих утилитах делал). Можешь у него спросить.

Loopback wrote:
Честно - с потолка. Ну вдруг Кристиан еще что-нибудь надумает сделать. Это чтобы потенциально не пересечься.
Так и думал. Можно ещё было отрицательными, но маленькими сделать. )

Loopback wrote:
Какая в принципе теперь разница, если схема все равно не работает с кастомными меню.
А переделать не пробовал?
Loopback wrote:
Но в любом случае, функцию можно убирать, или нужно переделывать.

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Mon Mar 23, 2020 17:23    Post subject: Reply with quote

Среди бурного обсуждения умных вещей так и не понял одного... А что изменилось в назначении/обработке переменных в последних двух бетах?
Раньше (до 2.0.8 включительно) было так:
SetEnv ADMIN *
Создавалась переменная ADMIN, которой присваивалось значение *.
А сейчас как нужно? C ShellExec тоже что-то изменилось?
_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Mar 23, 2020 17:42    Post subject: Reply with quote

LonerD wrote:
Создавалась переменная ADMIN, которой присваивалось значение *.
И сейчас создаётся.

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Mon Mar 23, 2020 18:03    Post subject: Reply with quote

Flasher wrote:
И сейчас создаётся.

В том-то и дело, что нет. Заменяю один wdx файл на 2.0.8, запускаю Тотал - переменная есть. Заменяю на 2.0.10, запускаю Тотал - нету. Autorun.cfg при этом один и тот же.
_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Mar 23, 2020 18:21    Post subject: Reply with quote

LonerD wrote:
В том-то и дело, что нет.
Я же не от балды пишу, а проверяю. См. в x32 версии.
Вызов cmd /k set admin из комстроки даст ADMIN=* .
У тебя, вероятно, какой-то обрыв в условиях. MsgBox test прямо перед этой командой вставь и проверь.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1283

Post (Separately) Posted: Mon Mar 23, 2020 21:07    Post subject: Reply with quote

Flasher wrote:
Хотелось бы.

Ок, без /H будет применяться к окну целиком.

Flasher wrote:
Ну как зачем. Допустим:

Ок, в принципе можно и так. Для частей одного целого это имеет определенный смысл.

Flasher wrote:
Да и для контролов такое точно не помешает

Для контролов нет.
Flasher wrote:
знает как быстро подавлять отрисовку

Да я как бы идею представляю, но не так это просто. Меню системные (в заголовке например) прибил, там просто был косяк один. Наверно, это может решить и проблему с кнопками х1,х2. Вот с меню тоталовскими (на тулбаре, например) сложнее, не уверен, что оно стоит возни.
Flasher wrote:
А переделать не пробовал?

Нет. Тут, собственно, совсем мало вариантов остается, либо индексы (точно нет), либо просто поиск по тексту.

LonerD
В самом деле странно, у себя тоже попробовал - все создается. Код команды не менялся, ShellExec тем более.

Может где-то в другом месте что-то с выражениями? В них баги могут быть вполне.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Mar 23, 2020 22:41    Post subject: Reply with quote

Loopback wrote:
Ок, без /H будет применяться к окну целиком.
Ок, в принципе можно и так.
Отлично.
Loopback wrote:
Наверно, это может решить и проблему с кнопками х1,х2.
Не терпится проверить. Smile
Loopback wrote:
не уверен, что оно стоит возни.
Если учитывать, что правую кнопку удобно использовать в качестве модификатора (гор. прокрутка в ScrollTC как пример), то, видимо, стоит.
Loopback wrote:
либо просто поиск по тексту.
Меня устроит. По паре \t или пробелов. А ты ищешь в mnu или в интерфейсе? Если в mnu, то самое простое — это по командному идентификатору в конце после запятой. Там достаточно 0 вместо команды прописать.

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Tue Mar 24, 2020 04:36    Post subject: Reply with quote

Loopback wrote:
Может где-то в другом месте что-то с выражениями?

Действительно, не конкретно в этом была проблема, но где-то в предшествующих секциях.
Сократил autorun.cfg до такого размера, который работает в 2.0.8, но не работает в 2.0.10 (не назначается переменная DLADMIN и не запускается ехе-шник).

Code:
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetEnv /EV TCPL %commander_path%\Plugins

SetEnv DLOSVERS w6
If %sysinfo_osversion% = WIN_XP Then
  SetEnv DLOSVERS w5
EndIf

SetEnv DLOSISXP
If %DLOSVERS% = w5 Then
  SetEnv DLOSISXP XP
EndIf

SetEnv DLADMIN *
If %DLOSVERS% = w5 Then
  SetEnv DLADMIN
EndIf

ShellExec /W "%TCPL%\exe\TCLair\TCLair.exe" "" ""

_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1283

Post (Separately) Posted: Tue Mar 24, 2020 15:06    Post subject: Reply with quote

Flasher wrote:
Если учитывать, что правую кнопку удобно использовать в качестве модификатора (гор. прокрутка в ScrollTC как пример), то, видимо, стоит.

Ладно, время будет - покопаю.
Flasher wrote:
А ты ищешь в mnu или в интерфейсе?

В уже созданном меню, конечно. Собственно, идея в том и была, чтобы не парсить меню.

LonerD
А никаких сообщений об ошибках разве не выдавалось?

Спасибо за тест, проблему нашел, как и думал в условиях: переменная в выражении бралась только внутренняя, а нужно было еще смотреть переменные окружения. Вечером выложу исправленную версию.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1283

Post (Separately) Posted: Tue Mar 24, 2020 23:27    Post subject: Reply with quote

Бета-версия 2.0.11

* Tweaks: изменен синтаксис ControlSetMouseAction, вместо CMD/EMCMD используются встроенные команды Autorun
+ Tweaks: в ControlSetMouseAction зоны главного окна могут суммироваться
* Tweaks: действие по умолчанию (например, контекстные меню) не выполняется, если на эту кнопку назначено своё действие
- исправлена проблема с получением переменных окружения в выражениях

Внимание! Синтаксис ControlSetMouseAction поменялся!

Теперь вместо CMD/EMCMD можно использовать внутренние команды Autorun в соответствии с их синтаксисом.

Теперь при назначенной команде стандартное действие (например, контекстное меню при /R) не выполняется.

В более сложных случаях (например, колесо при модификаторе /K:R, на контроле, имеющем контекстное меню), чтобы меню не появлялось, надо "заглушить" стандартное действие, создав запись с пустым действием. Например, переключение вкладок колесом при нажатой правой кнопке:

Code:
ControlSetMouseAction /R 10017
ControlSetMouseAction /W:R /K:R 10017 SendCommand 3005
ControlSetMouseAction /W:F /K:R 10017 SendCommand 3006


Меню при этом доступно не будет.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Wed Mar 25, 2020 00:42    Post subject: Reply with quote

Loopback
Ничего толком не завелось. Весь конфиг:
Code:
LoadLibrary Plugins\Autorun_Tweaks.dll
# Никакой реакции на прокрутку вкладок над активной панелью:
ControlSetMouseAction /W:R /K:R 10017 SendCommand 3005
ControlSetMouseAction /W:F /K:R 10017 SendCommand 3006
ControlSetMouseAction /W:R 10017 SendCommand 3005
ControlSetMouseAction /W:F 10017 SendCommand 3006
# Тут только меню мелькает на заголовке, команда не выполняется:
ControlSetMouseAction /R /H:62 /K:A SendCommand 321
# Тут даже меню не пропадает:
ControlSetMouseAction /R /H:62 /K:C SendCommand 321
# Только дефолтный переход по истории каталогов, команды не выполняются:
ControlSetMouseAction /X1 /H:0 SendCommand 321
ControlSetMouseAction /X2 /H:0 SendCommand 322
Win7 x32, TC 9.51 RC6 x32 с одним плагином Autorun, служба Темы отключена, все резидентные программы (кроме чисто системных), браузеры и редакторы отключены. Для чистоты эксперимента даже Realtek и Nvidia (включая службы) отключил/остановил.
_________________
Автору сборки 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 ... 101, 102, 103 ... 132, 133, 134  Next
Page 102 of 134

 
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