Получить заголовок вкладки
Получить заголовок вкладки
Нужно получить заголовок вкладки см рисунок:
Программа WinSpy заголовок определяет каким-то образом. Как определить с помощью скрипта ahk?Re: Получить заголовок вкладки
Я так понимаю, количество вкладок и их названия меняются? Ох, это сложно, и у меня нет готового решения.
Window Spy собирает текст со всего окна, и установить, к какому именно контролу какая строка относится, не всегда просто.
Более того, в моих тестах я обнаружил, что не открывавшиеся ранее вкладки, похоже, могут вообще не загружаться в память − Window Spy их просто не видит (см. вложение).
Если у ленты со вкладками родной, системный класс (…SysTabControl32…), то по крайней мере можно выцепить порядковый номер активной вкладки через ControlGet, v, Tab. Извлечь название, впрочем, мне так и не удалось − на SendMessage, TCM_GETITEM… винформовский контрол не среагировал. Если же это какой-то самодельный контрол, то увы − их разработчики обычно не утруждают себя проработкой подобных деталей.
В моём тесте, однако, область вкладки под лентой отдавала правильное название (см. вложение). Советую включить „Follow Mouse“ в Window Spy и проверить − если название найдётся, можно попробовать обойтись костылём:
Window Spy собирает текст со всего окна, и установить, к какому именно контролу какая строка относится, не всегда просто.
Более того, в моих тестах я обнаружил, что не открывавшиеся ранее вкладки, похоже, могут вообще не загружаться в память − Window Spy их просто не видит (см. вложение).
Если у ленты со вкладками родной, системный класс (…SysTabControl32…), то по крайней мере можно выцепить порядковый номер активной вкладки через ControlGet, v, Tab. Извлечь название, впрочем, мне так и не удалось − на SendMessage, TCM_GETITEM… винформовский контрол не среагировал. Если же это какой-то самодельный контрол, то увы − их разработчики обычно не утруждают себя проработкой подобных деталей.
В моём тесте, однако, область вкладки под лентой отдавала правильное название (см. вложение). Советую включить „Follow Mouse“ в Window Spy и проверить − если название найдётся, можно попробовать обойтись костылём:
Code: Select all
GetActiveTabTitle() {
CoordMode, Window
MouseGetPos, prevMx, prevMy
MouseMove, COORDX, COORDY ; Заменить на нужные Window-координаты места проверки
MouseGetPos,,,, ctrlClass
ControlGetText, tabTitle, %ctrlClass%, A
MouseMove, %prevMx%, %prevMy%
Return tabTitle
}
- Attachments
-
- winforms_2_tabtitle.png (20.02 KiB) Viewed 1487 times
-
- winforms_1_tabtest.png (42.41 KiB) Viewed 1487 times
Re: Получить заголовок вкладки
Информация для меня очень полезная, спасибо. Написал тестовую программу, использовал ahk скрипт. Вот результат:
Но ведь WindowSpy как-то определяет?
Из рисунка видно, что название вкладки в моем случае предложенным способом определить, к сожалению, не получится, потому что в "боевой" программе наверняка на вкладке лежит куча компонентов. Но ведь WindowSpy как-то определяет?
Re: Получить заголовок вкладки
WindowSpy определяет наличие текста в контролах, это верно, но активную вкладку он всё же не показывает.
Под спойлером − простой дамп WinGet ControlList / ControlGetPos / ControlGetText для моей тестовой программы. Из него видно, что в самом TabControl текста нет, а каждая вкладка − отдельный контрол, из которого WindowSpy и берёт названия вкладок.
Гораздо большего успеха удалось добиться с помощью AccViewer, который достаёт и все имена вкладок, и номер открытой вкладки (см. вложение), но, опять же − при условии родного SysTabControl.
Под спойлером − простой дамп WinGet ControlList / ControlGetPos / ControlGetText для моей тестовой программы. Из него видно, что в самом TabControl текста нет, а каждая вкладка − отдельный контрол, из которого WindowSpy и берёт названия вкладок.
Дамп
Поскольку у вкладок схожее имя класса (…Window.8…), можно отобрать только их, собрать текст из них в массив, и по номеру открытой вкладки определять название. Правда, при условиях, что в программе родной SysTabControl, и − из-за вышеупомянутой „ленивой“ загрузки − что все вкладки открывались хотя бы раз.Гораздо большего успеха удалось добиться с помощью AccViewer, который достаёт и все имена вкладок, и номер открытой вкладки (см. вложение), но, опять же − при условии родного SysTabControl.
- Attachments
-
- winforms_3_testacc.png (29.39 KiB) Viewed 1420 times
Who is online
Users browsing this forum: No registered users and 15 guests