1 (изменено: stealzy, 2016-07-24 11:07:35)

Тема: AHK: Acc - работа с дочерними элементами

yalanne приводил пример, как узнать accValue и accName элемента под курсором.
Возможно ли узнать количество дочерних элементов окна и их пути(хендлы)?

2

Re: AHK: Acc - работа с дочерними элементами

stealzy, accName и accValue — это свойства элемента, они между собой никак не связаны. Это просто строчные значения без всякого указателя на сам объект, так что напрямую никак. Можно перебрать все дочерние элементы у родительского, и выяснить их Name и Value, но нужно учитывать, что они могут быть одинаковыми у нескольких элементов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: stealzy, 2016-07-24 11:06:25)

Re: AHK: Acc - работа с дочерними элементами

Пример для калькулятора, считывающий результат (требует Acc.ahk):

#Include Acc.ahk
if !WinExist("ahk_class CalcFrame ahk_exe calc.exe") {
	Run calc.exe
	Sleep 500
}
ControlGet, hWnd, Hwnd,, Static4, ahk_class CalcFrame ahk_exe calc.exe ; Запись в hWnd контрола, содержащего "Результат" калькулятора
MsgBox,,% Acc_Get("Name", ChildPath := 4,, "ahk_id" hWnd) , % Acc_Get("Value", ChildPath := 4,, "ahk_id" hWnd)

ChildPath получен с помощью AccViewer.
Показывает относительный путь! Несмотря на то, что целился в рамку окна нужной мне программы, оказалось что спереди нужно добавить "2.", т.е. AccViewer показывал ChildPath := "3.1.1.1.1.1", а нужно было ChildPath := "2.3.1.1.1.1.1". Если целиться внутри окна, можете получить и "1.1.1".
Если копируете путь из AccViewer, заменяйте запятые в пути на точки!

Количество дочерних элементов в корне и у 2-го элемента в корне:

Acc := Acc_ObjectFromWindow(hWnd)
RootChildElementNumber := Acc_Children(Acc).MaxIndex()
2elChildElementNumber := Acc_Children(Acc_Children(Acc)[2]).MaxIndex()

Неплохо бы написать функцию, по наведению курсора получающую полный путь.
А если допустим есть Acc кнопка, ее можно нажать?

4

Re: AHK: Acc - работа с дочерними элементами

stealzy пишет:

А если допустим есть Acc кнопка, ее можно нажать?

accDoDefaultAction()?