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

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

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

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):TCFS2 /ef "send(`%(){DOWN}{ENTER}`) + delay(100) + send(`{TAB 2} {ENTER}`)"
У меня успевает вызвать диалог изменения атрибутов и выдаёт ошибку

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

---------------------------
TCFS2
---------------------------
Error:
Invalid function call

Apply command:
+delay(100)+send(`{TAB 2} {ENTER}`)
---------------------------
ОК   
Если /ef и далее записываю в кнопке в строке Параметры, то диалог совсем не вызывается, а ошибка выглядит так:

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

---------------------------
TCFS2
---------------------------
Error:
Invalid function call

Apply command:
{DOWN}{ENTER}`)+delay(100)+send(`{TAB 2} {ENTER}`)
---------------------------
ОК   
---------------------------
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А, блин, точно, просто так же плюс нельзя, надо всё выражение в eval заключать:

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

TCFS2 /ef "eval(send(`%(){DOWN}{ENTER}`) + delay(100) + send(`{TAB 2} {ENTER}`))"
А в строке параметров % надо удваивать.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):А в строке параметров % надо удваивать.
Спасибо, не учёл.

В выражении с eval ошибка не выскакивает, но send(`{TAB 2} {ENTER}`) передаётся уже не в окно диалога изменения атрибутов, которое остаётся открытым, а в окно TC.
Последний раз редактировалось sa Вт мар 12, 2013 17:51, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

Тогда на кой нужны были бы резидентные скрипты, если бы они сверяли класс только раз? Всё время сверяет.
Один раз - имелось в виду, непосредственно перед очередным выполнением скрипта. Когда класс сверен и начато выполнение скрипта, вряд ли до окончания его выполнения будет следующая проверка.
Активировать и не надо, надо не разрешать выполнять нажатия, когда окно не активно.
Не вижу смысла. При активации из тотала (хоткеем или кнопкой тулбара) тотал все равно будет активным. А активировать такую команду, когда поверх тотала открыт модальный диалог, из тотала не получится всё равно. При активации по хоткею какого-нибудь менеджера хоткеев - неизвестно, какое окно будет активным (полезность команды станет нулевой). Так или иначе, работа будет выполняться именно с тоталом, следовательно, раз команда запущена, она должна что-то сделать.
Ты ж пишешь, что send не всё равно. А по этим словам, получается, что всё равно.
Для send всё равно, кто получит нажатия. Не всё равно тому, кто send вызывает. :)
(в AHK можно и по контролам бегать)
Думаю, она ко всем процессам подключает свой хук-модуль.
Поэтому тут развитие потребуется для ровных срабатываний.
Популярнее поясни, чего конкретно ты пытаешься добиться проверкой класса активного окна.
sa писал(а):send(`{TAB} {ENTER}`) передаётся уже не в окно диалога изменения атрибутов, которое остаётся открытым, а в окно TC.
Да, тут баг. Я думал, что при активации окна тотала (которая происходит при вызове второй send) система активирует модальное окно, но она умудряется сделать активным окно тотала при открытом диалоге, в результате нажатия передаются ему. Нашел способ активировать именно модальное окно, если оно есть, проверяй.

Бета 334.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):проверяй
Так нормально.
Можно, наверное, и без eval обойтись?

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

TCFS2 /ef "send(`%(){DOWN}{ENTER}`) delay(100) send(`{TAB 2} {ENTER}`)"
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Кстати, действительно, можно и без eval. :)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Если диалог изменения атрибутов вызывать внутренней командой, то send(`{TAB 2} {ENTER}`) передаётся опять же не в окно диалога, а в окно TC.

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

TCFS2 /ef "tcm(502) delay(100) send(`{TAB 2} {ENTER}`)"
С EM-командами, как будто всё нормально.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

вызывать внутренней командой
Проблема в том, что tcm не возвращает управление до закрытия диалога. Пробуй вызывать внутренние команды через msg($433, 502, 0, 1), так будет работать. Зацени разницу:

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

TCFS2 /ef "msg($433, 501, 0, 0) send(`привет`)"
TCFS2 /ef "msg($433, 501, 0, 1) send(`привет`)"
Напоминаю, msg($433, 501, 0, 0) и tcm(501) работают абсолютно одинаково.

Исправил маленький косяк, из-за которого русские буквы не вводились на английской раскладке.
Бета 336.

Кстати, для ввода символа "`" можно использовать send(`{~}`). А для переключения раскладки в тотале можно использовать send(`%+()`) (для Alt+Shift, для Ctrl+Shift угадайте).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Пробуй вызывать внутренние команды через msg($433, 502, 0, 1), так будет работать.
Да, это выход из положения. Спасибо за наводку.
MVV писал(а):А для переключения раскладки в тотале можно использовать send(`%+()`)
Мне оказалось удобнее завести в системе отдельные сочетания клавиш для переключения на русский и на английский языки ввода. Они срабатывают через send(`^+2`) и send(`^+1`).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

При использовании em-команды с параметрами последующие нажатия клавиш (с помощью send) передаются не в окно диалога, а в окно TC (уже после закрытия диалога). Обнаружил на примере с командой MultiRename.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, есть такое дело. Проблема в том, что EM-команды можно отправлять только через SendMessage (там передается сообщение WM_COPYDATA), следовательно, пока тотал не вернет мне управление, выполнив команду, я жду.

Получается, что чтобы загрузить шаблон и потом заполнить его, надо открывать MRT через msg($433, 2400, 0, 1), потом табулировать до раскрывающегося списка шаблонов... Мрак, конечно, если учесть, что шаблоны могут появиться и новые.

Возможно, прикручу опцию передачи сообщения в отдельном потоке. Вообще думаю добавить по необязательному параметру для tcm и tem, чтобы посылать в другом потоке.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение Flasher »

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

Сообщение MVV »

Банально: чтобы не было ложных вызовов в других окнах.
Ну так активация окна решит эту проблему. Можно после активации проверить, что она произошла. А без активации - какой смысл? Кто будет вызывать команду, посылающую нажатия окну тотала, когда окно неактивно?
Ответить