TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 120, 121, 122 ... 128, 129, 130  Next  :| |:
Total Commander -> Плагины Total Commander

#1801:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 05, 2016 00:54
    —
Flasher wrote:
Только 1 и начинается с 1.

Ну тогда совсем несложно будет переводить одно в другое.
Quote:
Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает?

Переменная просто возвращает глубину вложенности вызовов макросов/команд. Каждый следующий вложенный вызов команды или макроса (не функции) - это +1 к уровню.
Quote:
И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно?

Возврат строк из функций всё ещё не поддерживается.

#1802:  Author: FlasherLocation: Москва PostPosted: Mon Dec 05, 2016 01:33
    —
MVV wrote:
Ну тогда совсем несложно будет переводить одно в другое.
Ну, в принципе, да, 1 отнимать.
MVV wrote:
Переменная просто возвращает глубину вложенности вызовов макросов/команд.
А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать:
Code:
eval(varset(@lvl, findwnd(TMyComboBox, , , 0, 1))
varset поставляет в переменную значение, полученное findwnd. Но как туда попадает позиция в дереве окон?
MVV wrote:
Возврат строк из функций всё ещё не поддерживается.
А вот пригодился бы теперь.

#1803:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 05, 2016 13:26
    —
Quote:
А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать:

Собственно, после возврата из функции (после подъёма на уровень вверх) её переменные уже не нужны и могут быть переиспользованы. И потом, глубина вложенности в TCFS2 уже есть, используется для защиты от зацикливания.
А что такое порядковый номер?

Quote:
varset поставляет в переменную значение, полученное findwnd. Но как туда попадает позиция в дереве окон?

Позиция попадает в findwnd, а varset запоминает уже найденное окно с заданной позицией.

#1804:  Author: FlasherLocation: Москва PostPosted: Tue Dec 06, 2016 18:57
    —
MVV wrote:
Собственно, после возврата из функции (после подъёма на уровень вверх) её переменные уже не нужны и могут быть переиспользованы.
Какая связь у переиспользования с глубиной? Confused
MVV wrote:
А что такое порядковый номер?
Номер элемента окна в порядке следования в дереве.
MVV wrote:
Позиция попадает в findwnd, а varset запоминает уже найденное окно с заданной позицией.
Позиция? Туда разве не дескриптор попадает, если верить справке?

#1805:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Dec 06, 2016 19:52
    —
Quote:
Какая связь у переиспользования с глубиной?

Стандартный стек: переменные выделяются на стеке, а по выходу из функции на их месте выделяются переменные следующей запущенной функции.

Quote:
Номер элемента окна в порядке следования в дереве.

Как-то ты смешал @lvl и индексы окон... Это совершенно разные вещи.

Quote:
Позиция? Туда разве не дескриптор попадает, если верить справке?

В твоём примере вычисляется findwnd(TMyComboBox, , , 0, 1), и затем результат записывается в ячейку памяти TCFS2 с индексом @lvl. Позиция в дереве окон здесь - параметр функции findwnd. А номер ячейки памяти задаётся псевдопеременной @lvl.

#1806:  Author: FlasherLocation: Москва PostPosted: Tue Jan 10, 2017 09:46
    —
MVV
А с диалогом Открыть что-то можно придумать?:
Code:
/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 wrote:
Quote:
И что насчёт установки фокуса?

Терпение, мой друг, терпение. Smile
Долго терпеть-то? Smile

Для чекбоксов и радиокнопок обнова требуется, или силами msg решаемо?
+ Есть пожелание: если в findwnd вместо класса пишем A (@,#,$ - не суть), то берётся класс окна на переднем плане.

#1807:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 10, 2017 13:26
    —
Flasher wrote:
А с диалогом Открыть что-то можно придумать?:
Code:
/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)))"

Здесь у меня сработал такой вариант:
Code:
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 wrote:
Долго терпеть-то? Smile

Если терпеть, то долго... Забыл я про TCFS2, постараюсь на днях сделать.

Flasher wrote:
Для чекбоксов и радиокнопок обнова требуется, или силами msg решаемо?

Какая обнова?

Flasher wrote:
+ Есть пожелание: если в findwnd вместо класса пишем A (@,#,$ - не суть), то берётся класс окна на переднем плане.

Да собственно для этого достаточно простого findwnd(), что легко проверить с помощью команды:
Code:
TCFS2 /ef delay(2000) /ei "settext(findwnd())"

При этом в течение этих двух секунд можно открыть произвольный диалог тотала и потом найти вовращаемый дескриптор окна в дереве окон процесса. Однако беда в том, что на самом переднем плане почему-то оказываются окна с классом Auto-Suggest Dropdown (скрытые вспомогательные окна) - они идут первыми по Z-порядку... Можно, конечно, пропускать скрытые окна, если findwnd запускается вообще без параметров (хотя лучше наверное флаг завести для пропуска невидимых окон).

#1808:  Author: FlasherLocation: Москва PostPosted: Tue Jan 10, 2017 14:00
    —
MVV wrote:
Здесь у меня сработал такой вариант:
У меня не срабатывает. Если к ComboBox дописываю Ex32, то работает с задержкой 100.
MVV wrote:
Также не совсем понимаю, почему сам комбобокс игнорирует сообщение WM_SETTEXT.
А это может быть связано с тем, что это системное окно, а не ТС?

MVV wrote:
постараюсь на днях сделать.
Гуд.
MVV wrote:
Какая обнова?
Нововведение.
MVV wrote:
хотя лучше наверное флаг завести для пропуска невидимых окон
Лучше их в автоматический игнор ставить.

#1809:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 10, 2017 14:08
    —
Quote:
А это может быть связано с тем, что это системное окно, а не ТС?

Скорее, компонент хитрый. Если слать сообщение верхнему ComboBoxEx32, то работает. А если среднему ComboBox - нет.

Quote:
Нововведение.

Которое из?

Quote:
Лучше их в автоматический игнор ставить.

Совсем игнорить их нельзя. Я могу захотеть найти скрытый чекбокс и включить его.

#1810:  Author: FlasherLocation: Москва PostPosted: Tue Jan 10, 2017 14:18
    —
MVV wrote:
Если слать сообщение верхнему ComboBoxEx32, то работает. А если среднему ComboBox - нет.
Так у тебя же в команде как раз средний. Да и всё равно без задержки никак. И на x64 системе/ТС класс тот же?
MVV wrote:
Которое из?
Оба. Smile Обновление с двумя нововведениями (отметкой чекбокса и радиокнопки).
MVV wrote:
Я могу захотеть найти скрытый чекбокс и включить его.
Понятно. Пусть будет флаг.

#1811:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 10, 2017 15:29
    —
Quote:
Так у тебя же в команде как раз средний. Да и всё равно без задержки никак. И на x64 системе/ТС класс тот же?

Корпоративная Win7x64 с обновлениями. Оно по идее должно только от версии системной библиотеки зависеть и от используемого класса (Проводник как всегда впереди планеты всей, ему мало ComboBox, ему надо ComboBoxEx32, на который я документации не вижу).

Quote:
Обновление с двумя нововведениями (отметкой чекбокса и радиокнопки).

Фух, понял. Радиокнопке достаточно послать BM_CLICK ($F5) для активации, а чекбоксу - BM_SETCHECK ($F1) с новым состоянием в wParam: 0 - снять, 1 - установить, 2 - затемнить. Хоть вчера. Smile

#1812:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 10, 2017 23:13
    —
Собственно,

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

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

Играем:
Code:
TCFS2 /ef delay(2000) /ei "settext(`focus: ` msg($433, 65557))"
TCFS2 /ef delay(2000) /ef "msg($433, 65558, 1050700)"


Успел заметить, что с окнами BTM (ДФП) не работает (возможно, они работают в другом потоке).

#1813:  Author: FlasherLocation: Москва PostPosted: Tue Jan 10, 2017 23:37
    —
MVV
Вот спасибо! Smile
Правда, хотелось, чтобы определение активного окна/контрола было в самой TCFS2.

В первом примере запятой нет.
Во втором 1050700 - это что?

#1814:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jan 11, 2017 00:23
    —
В самой TCFS2 невозможно, т.к. это работает только в пределах процесса.

Читай в Readme описание синтаксиса, всё ж описано. Smile
Первый пример - получение фокуса, второй пример - установка (после запятой - тестовый дескриптор окна).

#1815:  Author: FlasherLocation: Москва PostPosted: Wed Jan 11, 2017 00:37
    —
Получение фокуса не срабатывает. Нажал, перешёл в комстроку - тихо.
Про 1050700 ReadMe молчит.



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 120, 121, 122 ... 128, 129, 130  Next  :| |:
Page 121 of 130

Powered by phpBB © 2001, 2005 phpBB Group