Получить заголовок вкладки

Помощь в написании скриптов
Ramzay
Posts: 2
Joined: 14 May 2021, 01:26

Получить заголовок вкладки

Post by Ramzay » 14 May 2021, 01:35

Нужно получить заголовок вкладки см рисунок:
image.png
image.png (80.85 KiB) Viewed 1513 times
Программа WinSpy заголовок определяет каким-то образом. Как определить с помощью скрипта ahk?

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Получить заголовок вкладки

Post by mcl » 14 May 2021, 19:49

Я так понимаю, количество вкладок и их названия меняются? Ох, это сложно, и у меня нет готового решения.

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
winforms_2_tabtitle.png (20.02 KiB) Viewed 1485 times
winforms_1_tabtest.png
winforms_1_tabtest.png (42.41 KiB) Viewed 1485 times
github://oGDIp - GDI+ wrapper for AHK v1.1

Ramzay
Posts: 2
Joined: 14 May 2021, 01:26

Re: Получить заголовок вкладки

Post by Ramzay » 16 May 2021, 05:10

Информация для меня очень полезная, спасибо. Написал тестовую программу, использовал ahk скрипт. Вот результат:
image.png
image.png (17.57 KiB) Viewed 1452 times
Из рисунка видно, что название вкладки в моем случае предложенным способом определить, к сожалению, не получится, потому что в "боевой" программе наверняка на вкладке лежит куча компонентов.
Но ведь WindowSpy как-то определяет?

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Получить заголовок вкладки

Post by mcl » 16 May 2021, 12:54

WindowSpy определяет наличие текста в контролах, это верно, но активную вкладку он всё же не показывает.
Под спойлером − простой дамп WinGet ControlList / ControlGetPos / ControlGetText для моей тестовой программы. Из него видно, что в самом TabControl текста нет, а каждая вкладка − отдельный контрол, из которого WindowSpy и берёт названия вкладок.
Дамп
Поскольку у вкладок схожее имя класса (…Window.8…), можно отобрать только их, собрать текст из них в массив, и по номеру открытой вкладки определять название. Правда, при условиях, что в программе родной SysTabControl, и − из-за вышеупомянутой „ленивой“ загрузки − что все вкладки открывались хотя бы раз.

Гораздо большего успеха удалось добиться с помощью AccViewer, который достаёт и все имена вкладок, и номер открытой вкладки (см. вложение), но, опять же − при условии родного SysTabControl.
Attachments
winforms_3_testacc.png
winforms_3_testacc.png (29.39 KiB) Viewed 1418 times
github://oGDIp - GDI+ wrapper for AHK v1.1

Post Reply

Return to “Помощь”