IvanChai
Новичок
- Сообщения
- 7
- Репутация
- 0
Пытаюсь управлять сторонним приложением (Zello), с помощью AutoIt последней версии. Читая интернеты и используя различные утилиты наконец удалось с помощью Inspect_W7 (в режиме MSAA) достучаться до списка и до его значений (см. скрин). При этом ни AutoIt Window info, ни SimpleSpy этих значений не видят.
Сейчас пытаюсь достучаться до значения Name, но это никак не получается, нашёл на autoitscript.com /forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/ пример и библиотеки, для работы с MSAA, достучался до Role и BoundingRectangle.
Код ниже достаёт содержимое списка(13-й пример из архива по ссылке, немного модифицированный), но значения Name там пустые:
В консоли получаю:
Подскажите как можно достучаться до Name, которые видны на скриншоте?
Сейчас пытаюсь достучаться до значения Name, но это никак не получается, нашёл на autoitscript.com /forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/ пример и библиотеки, для работы с MSAA, достучался до Role и BoundingRectangle.
Код ниже достаёт содержимое списка(13-й пример из архива по ссылке, немного модифицированный), но значения Name там пустые:
Код:
#include "CUIAutomation2.au3"
Opt( "MustDeclareVars", 1 )
Global $oUIAutomation
Global $hWnd
MainFunc()
Func MainFunc()
$hWnd = WinWait("[CLASS:d8348ccb68a1]", "", 10)
WinActivate($hWnd)
Local $ct ="[CLASSNN:SysListView321]";
Local $hWindow = ControlGetHandle($hWnd, "", $ct)
If Not $hWindow Then Return
$oUIAutomation = ObjCreateInterface( $sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation )
If Not IsObj( $oUIAutomation ) Then Return
Local $pWindow
$oUIAutomation.ElementFromHandle( $hWindow, $pWindow ) ; Window
If Not $pWindow Then Return
Local $oWindow = ObjCreateInterface( $pWindow, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
If Not IsObj( $oWindow ) Then Return
ListDescendants( $oWindow, 0, 0 ) ; Window
EndFunc
Func ListDescendants( $oParent, $iLevel, $iLevels = 0 )
If Not IsObj( $oParent ) Then Return
If $iLevels And $iLevel = $iLevels Then Return
Local $pRawWalker, $oRawWalker
$oUIAutomation.RawViewWalker( $pRawWalker )
$oRawWalker = ObjCreateInterface( $pRawWalker, $sIID_IUIAutomationTreeWalker, $dtagIUIAutomationTreeWalker )
Local $pUIElement, $oUIElement
$oRawWalker.GetFirstChildElement( $oParent, $pUIElement )
$oUIElement = ObjCreateInterface( $pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
Local $sIndent = ""
For $i = 0 To $iLevel - 1
$sIndent &= " "
Next
While IsObj( $oUIElement )
ConsoleWrite( $sIndent & "Title = " & _UIA_getPropertyValue( $oUIElement, $UIA_NamePropertyId ) & @CRLF & _
$sIndent & "Any = " & _UIA_getPropertyValue( $oUIElement, $UIA_LegacyIAccessibleNamePropertyId ) & @CRLF & _
$sIndent & "Bound = " & _UIA_getPropertyValue( $oUIElement, $UIA_BoundingRectanglePropertyId ) & @CRLF & _
$sIndent & "Role = " & Hex(_UIA_getPropertyValue( $oUIElement, $UIA_LegacyIAccessibleRolePropertyId ) ) & @CRLF)
ListDescendants( $oUIElement, $iLevel + 1, $iLevels )
$oRawWalker.GetNextSiblingElement( $oUIElement, $pUIElement )
$oUIElement = ObjCreateInterface( $pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
WEnd
EndFunc
Func _UIA_getPropertyValue( $obj, $id )
Local $tVal
$obj.GetCurrentPropertyValue( $id, $tVal )
If Not IsArray( $tVal ) Then Return $tVal
Local $tStr = $tVal[0]
For $i = 1 To UBound( $tVal ) - 1
$tStr &= "; " & $tVal[$i]
Next
Return $tStr
EndFunc
В консоли получаю:
Код:
...
Name 1 =
Name 2 =
Bound = 1597; 103; 238; 24
Role = 00000022
Name 1 =
Name 2 =
Bound = 1601; 103; 234; 24
Role = 00000029
Name 1 =
Name 2 =
Bound = 1597; 127; 238; 24
Role = 00000022
Name 1 =
Name 2 =
Bound = 1601; 127; 234; 24
Role = 00000029
...
Подскажите как можно достучаться до Name, которые видны на скриншоте?