View previous topic :: View next topic |
Author |
Message |
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Mon Dec 05, 2016 00:54 Post subject: |
|
|
Flasher wrote: | Только 1 и начинается с 1. |
Ну тогда совсем несложно будет переводить одно в другое.
Quote: | Не понятна реализация. Как формально комбинируется эта псевдопеременная с varset/varget, что и в каком виде она возвращает? |
Переменная просто возвращает глубину вложенности вызовов макросов/команд. Каждый следующий вложенный вызов команды или макроса (не функции) - это +1 к уровню.
Quote: | И ещё вопрос - как получить текст окна? Т.е. необходимо записать имеющийся текст, например, в varset, а потом подставить его с добавкой в settext. Скажем, на примере заголовка панели. Это возможно? |
Возврат строк из функций всё ещё не поддерживается. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Dec 05, 2016 01:33 Post subject: |
|
|
MVV wrote: | Ну тогда совсем несложно будет переводить одно в другое. | Ну, в принципе, да, 1 отнимать.
MVV wrote: | Переменная просто возвращает глубину вложенности вызовов макросов/команд. | А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать:
Code: | eval(varset(@lvl, findwnd(TMyComboBox, , , 0, 1)) | varset поставляет в переменную значение, полученное findwnd. Но как туда попадает позиция в дереве окон?
MVV wrote: | Возврат строк из функций всё ещё не поддерживается. | А вот пригодился бы теперь. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Mon Dec 05, 2016 13:26 Post subject: |
|
|
Quote: | А почему именно глубина, а не порядковый номер? Это меня и сбило с толку. Хотелось бы разобрать: |
Собственно, после возврата из функции (после подъёма на уровень вверх) её переменные уже не нужны и могут быть переиспользованы. И потом, глубина вложенности в TCFS2 уже есть, используется для защиты от зацикливания.
А что такое порядковый номер?
Quote: | varset поставляет в переменную значение, полученное findwnd. Но как туда попадает позиция в дереве окон? |
Позиция попадает в findwnd, а varset запоминает уже найденное окно с заданной позицией. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Dec 06, 2016 18:57 Post subject: |
|
|
MVV wrote: | Собственно, после возврата из функции (после подъёма на уровень вверх) её переменные уже не нужны и могут быть переиспользованы. | Какая связь у переиспользования с глубиной?
MVV wrote: | А что такое порядковый номер? | Номер элемента окна в порядке следования в дереве.
MVV wrote: | Позиция попадает в findwnd, а varset запоминает уже найденное окно с заданной позицией. | Позиция? Туда разве не дескриптор попадает, если верить справке? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Tue Dec 06, 2016 19:52 Post subject: |
|
|
Quote: | Какая связь у переиспользования с глубиной? |
Стандартный стек: переменные выделяются на стеке, а по выходу из функции на их месте выделяются переменные следующей запущенной функции.
Quote: | Номер элемента окна в порядке следования в дереве. |
Как-то ты смешал @lvl и индексы окон... Это совершенно разные вещи.
Quote: | Позиция? Туда разве не дескриптор попадает, если верить справке? |
В твоём примере вычисляется findwnd(TMyComboBox, , , 0, 1), и затем результат записывается в ячейку памяти TCFS2 с индексом @lvl. Позиция в дереве окон здесь - параметр функции findwnd. А номер ячейки памяти задаётся псевдопеременной @lvl. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 10, 2017 09:46 Post subject: |
|
|
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: | И что насчёт установки фокуса? |
Терпение, мой друг, терпение. | Долго терпеть-то?
Для чекбоксов и радиокнопок обнова требуется, или силами msg решаемо?
+ Есть пожелание: если в findwnd вместо класса пишем A (@,#,$ - не суть), то берётся класс окна на переднем плане. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Tue Jan 10, 2017 13:26 Post subject: |
|
|
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: | Долго терпеть-то? |
Если терпеть, то долго... Забыл я про TCFS2, постараюсь на днях сделать.
Flasher wrote: | Для чекбоксов и радиокнопок обнова требуется, или силами msg решаемо? |
Какая обнова?
Flasher wrote: | + Есть пожелание: если в findwnd вместо класса пишем A (@,#,$ - не суть), то берётся класс окна на переднем плане. |
Да собственно для этого достаточно простого findwnd(), что легко проверить с помощью команды:
Code: | TCFS2 /ef delay(2000) /ei "settext(findwnd())" |
При этом в течение этих двух секунд можно открыть произвольный диалог тотала и потом найти вовращаемый дескриптор окна в дереве окон процесса. Однако беда в том, что на самом переднем плане почему-то оказываются окна с классом Auto-Suggest Dropdown (скрытые вспомогательные окна) - они идут первыми по Z-порядку... Можно, конечно, пропускать скрытые окна, если findwnd запускается вообще без параметров (хотя лучше наверное флаг завести для пропуска невидимых окон). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 10, 2017 14:00 Post subject: |
|
|
MVV wrote: | Здесь у меня сработал такой вариант: | У меня не срабатывает. Если к ComboBox дописываю Ex32, то работает с задержкой 100.
MVV wrote: | Также не совсем понимаю, почему сам комбобокс игнорирует сообщение WM_SETTEXT. | А это может быть связано с тем, что это системное окно, а не ТС?
MVV wrote: | постараюсь на днях сделать. | Гуд.
Нововведение.
MVV wrote: | хотя лучше наверное флаг завести для пропуска невидимых окон | Лучше их в автоматический игнор ставить. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 10, 2017 14:18 Post subject: |
|
|
MVV wrote: | Если слать сообщение верхнему ComboBoxEx32, то работает. А если среднему ComboBox - нет. | Так у тебя же в команде как раз средний. Да и всё равно без задержки никак. И на x64 системе/ТС класс тот же?
Оба. Обновление с двумя нововведениями (отметкой чекбокса и радиокнопки).
MVV wrote: | Я могу захотеть найти скрытый чекбокс и включить его. | Понятно. Пусть будет флаг. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Tue Jan 10, 2017 15:29 Post subject: |
|
|
Quote: | Так у тебя же в команде как раз средний. Да и всё равно без задержки никак. И на x64 системе/ТС класс тот же? |
Корпоративная Win7x64 с обновлениями. Оно по идее должно только от версии системной библиотеки зависеть и от используемого класса (Проводник как всегда впереди планеты всей, ему мало ComboBox, ему надо ComboBoxEx32, на который я документации не вижу).
Quote: | Обновление с двумя нововведениями (отметкой чекбокса и радиокнопки). |
Фух, понял. Радиокнопке достаточно послать BM_CLICK ($F5) для активации, а чекбоксу - BM_SETCHECK ($F1) с новым состоянием в wParam: 0 - снять, 1 - установить, 2 - затемнить. Хоть вчера. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Tue Jan 10, 2017 23:13 Post subject: |
|
|
Собственно,
TCFS2Tools Build 220:
+ команды для получения и установки фокуса компонентов окон
Можно узнать дескриптор активного поля ввода/чекбокса/выпадающего списка и т.п. Можно переключить фокус, например, с диалога копирования на поле ввода кодировки в листере.
Играем:
Code: | TCFS2 /ef delay(2000) /ei "settext(`focus: ` msg($433, 65557))"
TCFS2 /ef delay(2000) /ef "msg($433, 65558, 1050700)" |
Успел заметить, что с окнами BTM (ДФП) не работает (возможно, они работают в другом потоке). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 10, 2017 23:37 Post subject: |
|
|
MVV
Вот спасибо!
Правда, хотелось, чтобы определение активного окна/контрола было в самой TCFS2.
В первом примере запятой нет.
Во втором 1050700 - это что? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 11, 2017 00:37 Post subject: |
|
|
Получение фокуса не срабатывает. Нажал, перешёл в комстроку - тихо.
Про 1050700 ReadMe молчит. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|