TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Два вопроса, может ли TCFS2:
1) Переименовать секцию *.INI-файла?
2) Закомментировать ключ *.INI-файла?
:roll:
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

1. Это видел?
2. Нет.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Flasher писал(а):1. Это видел?
2. Нет.
На оба вопроса ответ нет, жаль.

А что если это реализовать в доп. модуле типа TCFS2Tools? Задачи специфические, но спросом будут пользоваться определённо.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Это потребует передавать параметры-строки. Мне-то добавить функцию, отправляющую очередное сообщение с заданной строкой окну тотала, не сложно, но кто будет писать модуль? :roll:
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Бета 332.

Добавлена возможность передачи параметров EM-командам:

Код: Выделить всё

TCFS2 /ef "tem(`em_cd c:\`)"
TCFS2 /ef "tem(`em_exec notepad`)"
При этом у самих EM-команд в строке параметров нужно использовать %A.

Также добавлена функция send для отправки нажатий клавиш окнам тотала. Синтаксис - как в функциях SendKeys.Send (C#) и SendKeys (VBS), за парой различий: поддерживаются только самые короткие обозначения клавиш ({BS}, {INS}, {DEL}), часть клавиш я выкинул (всякие непонятные F13+ и HELP), ~ работает как обычная клавиша, а не как ENTER (ENTER можно послать через {ENTER}), ну и {{}/{}} не поддерживаются за ненадобностью (вместо них следует использовать {[}/{]} - эффект тот же, т.к. символы находятся на тех же клавишах). Повтор ({LEFT 20}) тоже работает. Т.е. можно делать так:

Код: Выделить всё

TCFS2 /ef "send(`%(){DOWN}{ENTER}{TAB 2} {ENTER}`)
TCFS2 /ef "send(`notepad ^+{ENTER}{ENTER}`)"
Если во время отправки нажатий активировать другое окно, клавиши получит оно. :D
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

А какое значение между нажатиями в мс? Можно ли увеличивать/уменьшать его?
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

На данный момент - никакого. Нажатия просто отправляются, ну а там система помещает их в очередь сообщений активного окна, и дальнейшая обработка уже зависит от тотала. Особого смысла пока в задержке не вижу (объясните, если он есть), разве что в разовых паузах (надо подумать, как их добавить - как вариант, что-то типа {WAIT 400}).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

О, дождались! :D Спасибо! И не нужны никакие tcimg и подобные грузомонстры.
Даже параметры - сильно! MVV, а к cm_ будут?

А под окнами подразумеваются все без исключения или только диалоги ТС?
MVV писал(а):Если во время отправки нажатий активировать другое окно, клавиши получит оно.
Плохо. А можешь сделать ограничение по классу (как AutoHotKey)?
MVV писал(а):Особого смысла пока в задержке не вижу
Я тоже не вижу. Задержка и так есть - delay.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

CM-команды не поддерживают передачу параметров по определению. Да и EM-команды их поддерживают не настолько хорошо, как хотелось бы - только ANSI.
А под окнами подразумеваются все без исключения или только диалоги ТС?
Система эмулирует нажатия клавиш, при этом ловит их активное окно. Перед началом эмуляции (в начале каждого вызова send) я делаю окно тотала активным. Если в тотале открыто модальное окно, нажатия получит оно (диалоги установки атрибутов, копирования и т.п., которые блокируют окно тотала).
Плохо. А можешь сделать ограничение по классу (как AutoHotKey)?
Мне объясняй подробнее, понятия не имею, как оно в AHK. Я и так окно тотала активирую перед началом передачи, так что всё должно быть в порядке, если не переключаться между окнами во время каждого вызова send (что по идее не так-то и просто, т.к. символы посылаются быстро).
Я тоже не вижу. Задержка и так есть - delay.
Кстати, да, можно же так её делать.

Код: Выделить всё

TCFS2 /ef "send(`%(){DOWN}{ENTER}`) + delay(100) + send(`{TAB 2} {ENTER}`)"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):CM-команды не поддерживают передачу параметров по определению.
Имелись в виду эти. Одна таки есть - cm_List.
MVV писал(а):Мне объясняй подробнее, понятия не имею, как оно в AHK.
Пример директивы: #IfWinActive ahk_class TPanel
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Имелись в виду эти. Одна таки есть - cm_List.
Думаю, она обрабатывается нестандартно. Обычные CM-команды - это просто сообщения с номерами, строки так передать невозможно (разве что в пределах одного процесса). Если она уж очень нужна, могу предложить сделать EM-команду с TOTALCMD /S=L %A.
Пример директивы: #IfWinActive ahk_class TPanel
Из внешнего процесса невозможно узнать, какое дочернее окно тотала имеет фокус ввода (только внедрением DLL). Проверить можно лишь окна верхнего уровня. Но после активации окна придется еще ждать, пока оно активируется, и проверять, совпадает ли класс. Или разбить активацию окна и отправку нажатий на разные функции, тогда можно добавить функцию проверки класса и/или текста текущего окна (опять же, верхнего уровня).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Если она уж очень нужна
Я не только имел в виду эту команду, но и другие по ссылке.
MVV писал(а):Но после активации окна придется еще ждать, пока оно активируется
Это как?
MVV писал(а):Или разбить активацию окна и отправку нажатий на разные функции, тогда можно добавить функцию проверки класса и/или текста текущего окна
Разбиение будет предполагать увеличение записей в синтаксисе. Лучше объединённую с проверкой класса (с заголовком теряется универсальность).
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Я не только имел в виду эту команду, но и другие по ссылке.
Те команды с параметрами вообще идут особняком. В totalcmd.inc специально написано, что они снабжены номерами исключительно для локализации.
Сейчас создал em_SyncOpen с командой SYNCOPEN и параметром %A, она в состоянии загружать шаблоны.

Код: Выделить всё

TCFS2.exe /ef "tem(`em_SyncOpen ИмяШаблона`)"
Это как?
Имелось в виду после отправки команды активации. Я не знаю, возвращает ли управление функция до того, как окно действительно получает фокус.
Лучше объединённую с проверкой класса
Толку с проверки класса? В AHK эта проверка внешняя и действует для целого куска скрипта, логично было бы и здесь отдельной функцией проверять класс активного окна (но если тотал вообще неактивен, то и класс будет вообще не тотальный). Но у нас всего одна функция send, которой не всё равно, какое окно активно (остальные работают не с активным окном, а с самим окном тотала, даже если оно неактивно), и я не вижу логичного способа добавления параметра класса.
Да и не все окна можно однозначно опознать по классу (а-ля TCx64, где сплошь и рядом Window - впрочем, все равно узнать, какое из дочерних окон активно, все равно нельзя).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Сейчас создал em_SyncOpen с командой SYNCOPEN и параметром %A, она в состоянии загружать шаблоны.
Да кто бы сомневался. Хотелось как раз таки обойти задействование em.
MVV писал(а):Я не знаю, возвращает ли управление функция до того, как окно действительно получает фокус.
А проверить? :)
MVV писал(а):В AHK эта проверка внешняя и действует для целого куска скрипта
Директива для всего скрипта. Но можно делать и для куска.
MVV писал(а):но если тотал вообще неактивен, то и класс будет вообще не тотальный
А TCFS2 какая разница, он же за пределами ТС не работает?
MVV писал(а):Но у нас всего одна функция send, которой не всё равно, какое окно активно
Отсюда поподробней. На чём стоят ограничения?
MVV писал(а):остальные работают не с активным окном, а с самим окном тотала, даже если оно неактивно
Да, это я знаю.
MVV писал(а):и я не вижу логичного способа добавления параметра класса
Смотря что ты понимаешь под нелогичным.
MVV писал(а):впрочем, все равно узнать, какое из дочерних окон активно, все равно нельзя
Можно узнавать какое активно в момент отправки команды и фиксировать до хэндлу.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да кто бы сомневался. Хотелось как раз таки обойти задействование em.
Пока никак. А с учетом того, что таких команд всего десяток, вообще не вижу проблемы.
Директива для всего скрипта. Но можно делать и для куска.
Не думаю, что AHK более 1 раза сверяет класс окна. Скорее всего, проверяет вначале, а потом работает с этим хэндлом. Но send работает без хэндла, поэтому сначала надо активировать тотал.
А TCFS2 какая разница, он же за пределами ТС не работает?
Раньше не работала. Но send может, поэтому она активирует окно тотала (но делать это перед отправкой каждого нажатия считаю излишним).
Отсюда поподробней. На чём стоят ограничения?
Ну как, ограничение в том, что если будет активно не окно тотала, нажатия получит неизвестно кто.
Смотря что ты понимаешь под нелогичным.
Добавление проверки активного класса для одной единственной функции.
Можно узнавать какое активно в момент отправки команды и фиксировать до хэндлу.
Я могу узнать, какое окно активно, но какой его контрол (твоим языком говоря) имеет фокус, не могу. В частности, TPanel - это скорее контрол (контрол-контейнер), чем окно (контролы - это дочерние окна, элементы других окон).
И на данный момент все функции TCFS2 работают только с одни хэндлом окна - главного окна тотала. Его получение производится 1 раз - при инициализации TCFS2.
Ответить