Что нового

Автомат-вать работу приложения, элементы которого не видит AutoIt Window info

webmonster

Новичок
Сообщения
33
Репутация
0
Добрый день, коллеги. Подскажите пожалуйста как отмечать или выделять элементы программы, которые не видит AutoIT Window info. Приходилось уже автоматизировать установку Программ + настройку ini-файлов.
В общем так выглядит приложение с которым я собрался работать..
de182c2b79d6.jpg


Вопрос в том, чем подцеплять пункты выпадающего меню, если нужно выделить его двойным кликом?
Вариант с использованием координнат и кликов мыши по ним подходит меньше всего.
В идеале нужно распознать пункты меню и содержимое полей ID, Name и Adres.
С остальным, думаю, что разберусь.

ПС, камнями не кидаться, я учусь!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
webmonster
Очень похоже, что слева у Вас в приложении TreeView, а справа - ListView. Если это так, то смотрите в англ. справке функции по ним. User Defined Function Reference - GuiTreeView Management (GuiListView Management)/

PS
Если выложите куда-нибудь это приложение или дадите ссылку на него, то попробую Вам помочь.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ситуацию смоделировал грубо, но смысл, думаю понятен. :smile:
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test form", 1270, 867, 192, 114)
$TreeView1 = GUICtrlCreateTreeView(8, 8, 313, 849)
$TreeView1_0 = GUICtrlCreateTreeViewItem("Номер один", $TreeView1)
$TreeView1_1 = GUICtrlCreateTreeViewItem("Номер два", $TreeView1_0)
$TreeView1_2 = GUICtrlCreateTreeViewItem("Один", $TreeView1_1)
$TreeView1_3 = GUICtrlCreateTreeViewItem("Два", $TreeView1_1)
$TreeView1_4 = GUICtrlCreateTreeViewItem("Три", $TreeView1_1)
$TreeView1_5 = GUICtrlCreateTreeViewItem("Номер три", $TreeView1_0)
$TreeView1_6 = GUICtrlCreateTreeViewItem("Тест 1", $TreeView1_5)
$TreeView1_7 = GUICtrlCreateTreeViewItem("Тест 2", $TreeView1_5)
$TreeView1_8 = GUICtrlCreateTreeViewItem("Тест 3", $TreeView1_5)
$ListView1 = GUICtrlCreateListView("ID|Name|Address", 328, 8, 930, 846, -1, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 200)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 500)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

	If WinActive("Test form") Then
		Sleep(1000)
		Send("{NumPadMult}")
	EndIf
	Sleep(1000)
	$hTreeView1 = ControlGetHandle($Form1, "", $TreeView1)
	$Tree = ControlTreeView ($Form1, "", $hTreeView1, "Select", "Номер один|Номер два|Три")
	ControlClick("Test form","",$Tree)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $TreeView1_4
		GUICtrlCreateListViewItem("1|Name 1|Address 1", $ListView1)
		GUICtrlCreateListViewItem("2|Name 2|Address 2", $ListView1)
		GUICtrlCreateListViewItem("3|Name 3|Address 3", $ListView1)
		$Text = ControlListView("Test form", "", "[CLASS:SysListView32; INSTANCE:1]", "GetText",1,2)
		MsgBox(0,"",$Text)
		Exit
	EndSwitch
WEnd
 
Автор
W

webmonster

Новичок
Сообщения
33
Репутация
0
Принцип понятен, но в вашем примере понятно как обратиться к тому или иному разделу или подразделу дерева.
Я же вижу только названия разделов.
Я пробую сделать пошагово, но недопонимаю процесс.. вот кусок скрипта с попыткой кликать по веткам:
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
$maintree = "[CLASS:SysTreeView32; INSTANCE:1]"
WinWaitActive ('Application','')
If WinActive("Application") Then
        Sleep(1000)
        Send("{NumPadMult}")
    EndIf
    Sleep(1000)
    $hTreeView1 = ControlGetHandle("Application", "", $maintree); как я понял, выделяем окно с деревом... systreeview32 определил window info
$click1 = ControlTreeView("Application", "", $hTreeView1, "Select", "Управление"); берем в переменную ветку "управление"
$click2 = ControlTreeView("Application", "", $hTreeView1, "Select", "Действия"); берем в переменную ветку "Действия"
ControlClick("Appliaction","",$click1) ; Ветка "Управление" выделяется
MsgBox(1,"Шаг 1","Ткнули в управление"); сообщение вылезает
Sleep(3000)
ControlClick("Appliaction","",$click2) ; Ничего нового не происходит
MsgBox(1,"Шаг 2","Ткнули в Действия") ; сообщение вылезает
Exit
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
webmonster
Код:
;~ ~~~
	If WinActive("Application") Then ;если программа активна...
		Sleep(1000) ; задержка для наглядности
		Send("{NumPadMult}") ; то, посылаем команду, раскрыть всё дерево
	EndIf ; далее...
	Sleep(1000) ; задержка для наглядности
	$hTreeView1 = ControlGetHandle("Application", "", "[CLASS:SysTreeView32; INSTANCE:1]") ; получаем Handel контрола TreeView
	$Tree = ControlTreeView ("Application", "", $hTreeView1, "Select", _ 
							 "Управление|Действия|Отправить конфиг на терминал") ; выбираем пункт, по которому нужно кликнуть
																				 ; (при выборе происходит клик)
	ControlClick("Application","",$Tree) ; дублируем клик, если нужно (опционально)
;~ ~~~
	$Text = ControlListView("Application", "", "[CLASS:SysListView32; INSTANCE:1]", _ 
							"GetText",1,2) ; получаем текст и второй строки, третьей колонки ListView
	MsgBox(0,"",$Text)
;~ ~~~
 

decadent

Новичок
Сообщения
6
Репутация
0
Продолжу эту тему. Проблема похожа.

Как получить доступ к элементам этого Oracle Universal installer?
163060361.jpg
 
Верх