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

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

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

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

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

Сообщение Flasher »

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

Сообщение MVV »

Почитай Remarks.

Ожидать окна - явно задача не функции send. Согласись, название немного не то.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

В любом случае, выбор окна - не задача send. Крайний вариант - передать send дескриптор окна, который вернет другая функция.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

Бета 350.

Функция send теперь может принимать второй параметр - дескриптор окна. Если во время передачи нажатий окно потеряло фокус, передача прекращается и функция завершает работу. Если второй параметр не указан, активируется последнее модальное окно (как и раньше).

Функция findwnd возвращает дескриптор окна с заданными классом и/или названием, принадлежащее рабочему экземпляру тотала. Послать в калькулятор не получится.

Функция sendmsg отправляет сообщение окну с заданным дескриптором (первый параметр, остальные параметры - как у msg).

Функция tcm может принимать второй параметр - режим синхронности: 0 - синхронно, ждать результата (SendMessage), >0 - не ждать (PostMessage), <0 - не ждать (SendMessage в фоновом потоке). Пятый параметр функции msg теперь работает так же.

Функция tem может принимать второй параметр: если не 0, сообщение отправляется в фоновом потоке.

Примеры

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

/ef "tcm(2400,1) delay(100) send(`hello{TAB}world`)"
/ef "tem(`em_multirename шаблон1`, 1) delay(100) send(`hello{TAB}world`,findwnd(`TMultiRename`))"
/ef "tcm(502,1) delay(100) send(`{tab 4}`,findwnd(`TATTRIBDLG`))"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Ну, неплохо. А без delay можно вполне обходиться.
MVV писал(а):0 - синхронно, ждать результата (SendMessage), >0 - не ждать (PostMessage), <0 - не ждать (SendMessage в фоновом потоке)
Каким образом и с выполнением каких функций осуществляется синхронность? У тебя в примерах единицы стоят, а этих трёх нет. Можно примеры с описаниями того, как это работает?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение MVV »

Flasher,
Без delay иногда может не успевать. И фоновый тред может не успеть послать, как основная программа завершит работу (если после этой команды других команд мало).
Каким образом и с выполнением каких функций осуществляется синхронность? У тебя в примерах единицы стоят, а этих трёх нет. Можно примеры с описаниями того, как это работает?
Почему этих трех нет? 1>0 - раз. Все команды, для которых параметр не указан явно, посылаются с 0, как и раньше - два (с этим вариантом ты знаком не первый год). Добавился лишь 1 режим.
Раньше сообщения можно было слать (Send) и ставить в очередь (Post). Чтобы запросить у TCFS2Tools значение, нужен Send, чтобы послать нажатие или отжатие клавиши, нужен Post. Я сам не особо вижу разницы между Post и фоновым Send, на всякий случай есть оба. В тех примерах TCFS2.ini, где последний параметр равен 1, надо оставлять 1. Слать юзер-команды лучше через Send (обычный или фоновый, если надо в диалог потом послать нажатия или команды).
Точно как и раньше? У меня перестала срабатывать одна из кнопок с MRT, возможно потому, что в ней появляется всплывающее окно подтверждения отката при мультипереименовании.
При вызове send определяется окно, которому надо слать (автоматом или из второго параметра), и, если оно теряет фокус (проверка перед отправкой каждого нажатия, как просил Flasher), цикл отправки прерывается. Разбивай посылку на несколько send (первый - окну MRT, второй - всплывающему окну подтверждения и т.д., при этом у каждого send второй параметр можешь не указывать), возможно, между ними небольшую задержку (поэкспериментируй).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Разбивай посылку на несколько send
Это выход из положения.
MVV писал(а):Без delay иногда может не успевать.
Да уж, пока не догадался ввести delay - было страшновато.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

MVV
В чём ошибка?:
rleft=move(, , @/2, cyWorkArea)
Задал положение окна равным левой верхней точке рабочей области экрана, ширину - в половину ширины экрана, высоту - равную высоте рабочей области экрана (без панели задач).
Почему ширина неправильная (увы) - это понятно, левый border Тотала выезжает за пределы экрана потому как за координаты окна берётся не левая верхняя его точка, а что-то другое.
Но почему высота окна Тотала оказывается выше заданной? (нижняя часть окна уезжает под экран). Как правильно?
(хочу сэмулировать поведение окна, аналогичное Win+left в Win7/8 )
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD
А точно выезжает? И на сколько? Можно скриншот?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Flasher
Скриншот:
http://rghost.ru/44852021.view
Слева выезжает на размер bordera темы оформления (для наглядности - справа Акелпад выровненный вправо нажатием Win+Right).

После более внимательного рассмотрения, оказалось, что почему-то въезжает ещё и сверху под таскбар Windы, но совсем немножко. Возможно, это тоже связано с тем, что TCFS2 не учитывает border окна Тотала, а берёт за основу некую пятую точку.
Снизу - выезжает за пределы окна примерно на размер статус-строки (нижние кнопки отключены). Итого сверху под таскбар плюс снизу под экран выезжает примерно на размер таскбара.
То есть в качестве высоты окна Тотала учитывается не cyWorkArea, а @ )
Windows 11 | TC DreamLair eternal pre-α
Ответить