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

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

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

Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Только 1 и начинается с 1.
Ну тогда совсем несложно будет переводить одно в другое.
Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает?
Переменная просто возвращает глубину вложенности вызовов макросов/команд. Каждый следующий вложенный вызов команды или макроса (не функции) - это +1 к уровню.
И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно?
Возврат строк из функций всё ещё не поддерживается.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Ну тогда совсем несложно будет переводить одно в другое.
Ну, в принципе, да, 1 отнимать.
MVV писал(а):Переменная просто возвращает глубину вложенности вызовов макросов/команд.
А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать:

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

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

Сообщение MVV »

А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать:
Собственно, после возврата из функции (после подъёма на уровень вверх) её переменные уже не нужны и могут быть переиспользованы. И потом, глубина вложенности в TCFS2 уже есть, используется для защиты от зацикливания.
А что такое порядковый номер?
varset поставляет в переменную значение, полученное findwnd. Но как туда попадает позиция в дереве окон?
Позиция попадает в findwnd, а varset запоминает уже найденное окно с заданной позицией.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

Какая связь у переиспользования с глубиной?
Стандартный стек: переменные выделяются на стеке, а по выходу из функции на их месте выделяются переменные следующей запущенной функции.
Номер элемента окна в порядке следования в дереве.
Как-то ты смешал @lvl и индексы окон... Это совершенно разные вещи.
Позиция? Туда разве не дескриптор попадает, если верить справке?
В твоём примере вычисляется findwnd(TMyComboBox, , , 0, 1), и затем результат записывается в ячейку памяти TCFS2 с индексом @lvl. Позиция в дереве окон здесь - параметр функции findwnd. А номер ячейки памяти задаётся псевдопеременной @lvl.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
А с диалогом Открыть что-то можно придумать?:

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

/ef "tcm(2032,1) eval(settext_wait(`C:\List.txt`, findwnd(ComboBox,,,0,1)))"
/ef "tcm(2032,1) eval(settext_wait(`C:\List.txt`, findwnd(ComboBox,,findwnd(#32770),0,1)))"
MVV писал(а):
И что насчёт установки фокуса?
Терпение, мой друг, терпение. :)
Долго терпеть-то? :)

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

Сообщение MVV »

Flasher писал(а):А с диалогом Открыть что-то можно придумать?:

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

/ef "tcm(2032,1) eval(settext_wait(`C:\List.txt`, findwnd(ComboBox,,,0,1)))"
/ef "tcm(2032,1) eval(settext_wait(`C:\List.txt`, findwnd(ComboBox,,findwnd(#32770),0,1)))"
Здесь у меня сработал такой вариант:

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

TCFS2 /ef "tcm(2032,1) delay(1000) eval(settext_wait(`C:\List.txt`, findwnd(Edit,,findwnd(ComboBox,,findwnd(#32770),0,1))))"
Не знаю, почему без задержки не работает, возможно, само окно устанавливает пустой текст полю ввода уже после TCFS2. Также не совсем понимаю, почему сам комбобокс игнорирует сообщение WM_SETTEXT.
Flasher писал(а):Долго терпеть-то? :)
Если терпеть, то долго... Забыл я про TCFS2, постараюсь на днях сделать.
Flasher писал(а):Для чекбоксов и радиокнопок обнова требуется, или силами msg решаемо?
Какая обнова?
Flasher писал(а):+ Есть пожелание: если в findwnd вместо класса пишем A (@,#,$ - не суть), то берётся класс окна на переднем плане.
Да собственно для этого достаточно простого findwnd(), что легко проверить с помощью команды:

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

TCFS2 /ef delay(2000) /ei "settext(findwnd())"
При этом в течение этих двух секунд можно открыть произвольный диалог тотала и потом найти вовращаемый дескриптор окна в дереве окон процесса. Однако беда в том, что на самом переднем плане почему-то оказываются окна с классом Auto-Suggest Dropdown (скрытые вспомогательные окна) - они идут первыми по Z-порядку... Можно, конечно, пропускать скрытые окна, если findwnd запускается вообще без параметров (хотя лучше наверное флаг завести для пропуска невидимых окон).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

А это может быть связано с тем, что это системное окно, а не ТС?
Скорее, компонент хитрый. Если слать сообщение верхнему ComboBoxEx32, то работает. А если среднему ComboBox - нет.
Нововведение.
Которое из?
Лучше их в автоматический игнор ставить.
Совсем игнорить их нельзя. Я могу захотеть найти скрытый чекбокс и включить его.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

Так у тебя же в команде как раз средний. Да и всё равно без задержки никак. И на x64 системе/ТС класс тот же?
Корпоративная Win7x64 с обновлениями. Оно по идее должно только от версии системной библиотеки зависеть и от используемого класса (Проводник как всегда впереди планеты всей, ему мало ComboBox, ему надо ComboBoxEx32, на который я документации не вижу).
Обновление с двумя нововведениями (отметкой чекбокса и радиокнопки).
Фух, понял. Радиокнопке достаточно послать BM_CLICK ($F5) для активации, а чекбоксу - BM_SETCHECK ($F1) с новым состоянием в wParam: 0 - снять, 1 - установить, 2 - затемнить. Хоть вчера. :)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Собственно,

TCFS2Tools Build 220:
+ команды для получения и установки фокуса компонентов окон

Можно узнать дескриптор активного поля ввода/чекбокса/выпадающего списка и т.п. Можно переключить фокус, например, с диалога копирования на поле ввода кодировки в листере.

Играем:

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

TCFS2 /ef delay(2000) /ei "settext(`focus: ` msg($433, 65557))"
TCFS2 /ef delay(2000) /ef "msg($433, 65558, 1050700)"
Успел заметить, что с окнами BTM (ДФП) не работает (возможно, они работают в другом потоке).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Вот спасибо! :)
Правда, хотелось, чтобы определение активного окна/контрола было в самой TCFS2.

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

Сообщение MVV »

В самой TCFS2 невозможно, т.к. это работает только в пределах процесса.

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

Сообщение Flasher »

Получение фокуса не срабатывает. Нажал, перешёл в комстроку - тихо.
Про 1050700 ReadMe молчит.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить