Автор Тема: TreeView | Поиск в нужной ветке, активация элемента  (Прочитано 174 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dezex [?]

  • Новичок
  • *
  • Сообщений: 7
  • Репутация: 0
  • Пол: Мужской
    • Награды
Доброго дня!

Уфф... давно с питоном сижу, но опять AutoIt понадобился...

Не могу додумать / найти следующее решение:
- Есть  TreeView, нужно найти в определенной ветке параметр, активировать его, применить.
- Название параметры может "жить" в других ветках
- Метод ControlTreeView не дает получить текст (опции GetSelected/ Select работают)

В итоге пришел к UIA. Сейчас могу только активировать первый попавшийся (в другой ветке) элемент... Конечно могу тупо перебирать и сравнивать с ControlTreeView(...'GetSelected', 1).
Но это некрасиво и все таки думаю можно ограничить область поиска (одна из опций UIA_propertiesSupportedArray )... вопрос как?

Сейчас код выглядит так:

Код: AutoIt [Выделить]
#include "CUIAutomation2.au3"
#include "UIAWrappers.au3"
#include <MsgBoxConstants.au3>


;ControlTreeView ( 'Новая спецификация', '', '[CLASS:TrDBTreeView; INSTANCE:1]', "Select", '#2|#2|#12|#0')

; Делаем фокус на окне с указанныйм объектом TreeView
ControlFocus ( 'Новая спецификация', '', '[CLASS:TrDBTreeView; INSTANCE:1]' )

Func MainFunc()

  ; Get window handle for Windows Updates Downloader
  Local $hWindow = WinGetHandle( 'Новая спецификация' )
  If Not $hWindow Then Return -1

  ; Create UI Automation object
  Local $oUIAutomation = ObjCreateInterface( $sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation )
  If Not IsObj( $oUIAutomation ) Then Return -2

  ; Get UI Automation element from window handle
  Local $pWindow, $oWindow
  $oUIAutomation.ElementFromHandle( $hWindow, $pWindow )
  $oWindow = ObjCreateInterface( $pWindow, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
  If Not IsObj( $oWindow ) Then Return -3

  Local $oUIElement
  $oUIElement =_UIA_getObjectByFindAll($oWindow, "title:=Eltex MES1124M;ControlType:=UIA_TreeItemControlTypeId", $treescope_subtree)
  _UIA_action($oUIElement,"activate")


 ;$vv = _UIA_getBasePropertyInfo($oUIElement)
 ;ConsoleWrite($vv & @CRLF)
EndFunc

$var = MainFunc()
ConsoleWrite($var & @CRLF)

$var = ControlTreeView ( 'Новая спецификация', '', '[CLASS:TrDBTreeView; INSTANCE:1]', "GetSelected", 1)
ConsoleWrite($var & @CRLF)

 



Вывод WindowInfo:
(нажмите для показа/скрытия)

Вывод simplespy:
(нажмите для показа/скрытия)

Скрин окна с элементом, на котором запускал simplespy прикрепляю.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Русское сообщество AutoIt

TreeView | Поиск в нужной ветке, активация элемента
« Отправлен: Апрель 17, 2018, 17:05:15 »

Оффлайн Dezex [?]

  • Новичок
  • *
  • Сообщений: 7

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Ладно... делаю как и говорил - через GetSelected.

Код: AutoIt [Выделить]
#include "CUIAutomation2.au3"
#include "UIAWrappers.au3"
#include <MsgBoxConstants.au3>

Local $EqLocation[1][2] = [ _
      ['Сеть передачи данных > Логические устройств СПД > Коммутаторы', '^#2\|#2\|#12\|#\d+$'] _
      ]

Func ActivateTreeItem($title, $instance, $search, $pattern)

   ; Get window handle for Windows Updates Downloader
   Local $hWindow = WinGetHandle( $title )
   If Not $hWindow Then Return -1

   ; Create UI Automation object
   Local $oUIAutomation
   $oUIAutomation = ObjCreateInterface( $sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation )
   If Not IsObj( $oUIAutomation ) Then Return -2

   ; Get UI Automation element from window handle
   Local $pWindow, $oWindow
   $oUIAutomation.ElementFromHandle( $hWindow, $pWindow )
   $oWindow = ObjCreateInterface( $pWindow, $sIID_IUIAutomationElement, $dtagIUIAutomationElement )
   If Not IsObj( $oWindow ) Then Return -3

   ; Активируем искомый элемент из определенной ветки TreeView
   Local $oUIElement, $path_tree, $index = 0, $match = 0
   while 1
      $oUIElement =_UIA_getObjectByFindAll($oWindow, "title:="&$search&";ControlType:=UIA_TreeItemControlTypeId;index:="&$index, $treescope_subtree)
      If Not IsObj( $oUIElement ) Then Return -4
      _UIA_action($oUIElement,"activate")

      $path_tree = ControlTreeView ( $title, '', $instance, "GetSelected", 1)
      $match     = StringRegExp($path_tree, $pattern)

      if $match == 1 Then Return 1

      $index += 1
   WEnd

  _UIA_action($oUIElement,"activate")

EndFunc

; Активируем окно
$sTitle_2 = 'Новая спецификация'
WinActivate ($sTitle_2)
WinWaitActive($sTitle_2, '',2)

$var = ActivateTreeItem($sTitle_2, '[CLASS:TrDBTreeView; INSTANCE:1]', 'Juniper MX480', $EqLocation[0][1])
MsgBox($MB_OK,'TEST', $var)


 


Русское сообщество AutoIt

Re: TreeView | Поиск в нужной ветке, активация элемента
« Ответ #1 Отправлен: Апрель 18, 2018, 12:00:03 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
4533 Просмотров
Последний ответ Декабрь 03, 2009, 15:21:34
от Latoid
2 Ответов
3233 Просмотров
Последний ответ Январь 27, 2010, 13:49:07
от oneDmitry
0 Ответов
5290 Просмотров
Последний ответ Август 01, 2010, 13:26:04
от Yashied
1 Ответов
1929 Просмотров
Последний ответ Февраль 28, 2012, 17:41:20
от gregaz
0 Ответов
3737 Просмотров
Последний ответ Март 17, 2012, 02:40:29
от Rom5
8 Ответов
3771 Просмотров
Последний ответ Май 05, 2012, 11:22:59
от InnI
2 Ответов
1043 Просмотров
Последний ответ Март 13, 2015, 20:04:09
от noob
0 Ответов
849 Просмотров
Последний ответ Июль 27, 2016, 05:37:12
от Arbios
2 Ответов
383 Просмотров
Последний ответ Ноябрь 24, 2017, 21:28:11
от zennomonster
4 Ответов
393 Просмотров
Последний ответ Март 30, 2018, 19:05:53
от Vovsla