Что нового

[Окна, Диалоги] Помогите новичку правильно нажать на кнопку в диалоге

WasonAl

Новичок
Сообщения
31
Репутация
1
Извините, если вопрос показался примитивным, но что-то торможу и стандартные варианты не прошли.
Имеем вот такой диалог:

Вот какую выдачу даёт AutoIt v3 Window Info
Код:
>>>> Window <<<<
Title:	Работа с портфелями
Class:	#32770
Position:	672, 305
Size:	575, 589
Style:	0x94C800C4
ExStyle:	0x00010101
Handle:	0x0000000000320598

>>>> Control <<<<
Class:	Button
Instance:	7
ClassnameNN:	Button7
Name:	
Advanced (Class):	[CLASS:Button; INSTANCE:7]
ID:	
Text:	Текущий портфель
Position:	255, 7
Size:	309, 137
ControlClick Coords:	112, 112
Style:	0x50000007
ExStyle:	0x00000004
Handle:	0x00000000002207B8

>>>> Mouse <<<<
Position:	1042, 449
Cursor ID:	0
Color:	0xF0F0F0

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
&Прочитать из файла
CHECKSDELKI
 ALL_FIRMS
 ALL_CLIENTS
List2


DELETE_ALL_ITEMS () ' При обработке портфеля очищаем таблицу

' Этот маленький блок отвечает за создание таблицы и отображения в ней информации
output = CREATE_MAP ()
ADD_ITEM (1, output)



Загрузить &локально
Загрузить на &сервер
&Выход
Справка
Всего параметров:
1
Доступные портфели
Всего клиентов:
0
Текущий портфель
  Клиенты
Параметры портфеля:
  Фирмы
Формула расчета:


>>>> Hidden Text <<<<

[box title=TitleBox]Внимание вопрос. Как нажать на кнопку Загрузить локально? Имеем handle всего окна диалога.[/box]
 
Автор
W

WasonAl

Новичок
Сообщения
31
Репутация
1
madmasles сказал(а):
WasonAl
Скачайте Control Viewer - Альтернатива AutoIt Window Info и посмотрите ID этой кнопки.

Скачал, попробовал. Программа очень интересная. Но может я ещё не всё о ней знаю. При наведении на кнопку "Загрузить локально" в закладке Control этой замечательной программы возникает
[CLASS:Button; INSTANCE:7]
Тот же самый текст остаётся и при наведении на кнопку загрузить на сервер и вообще если поводить в пределах красной рамочки фрейма "Текущий портфель".
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
WasonAl
Попробуйте так найти кнопку:
Код:
#include <Array.au3>
#include <WinAPIEx.au3>

$sClass = 'Button'

$j = 0
Dim $aResult[$j + 1][6]


$hWin = WinWait('Работа с портфелями', '', 3)
If Not $hWin Then
	MsgBox(16, 'Error', 'Нет окна')
	Exit
EndIf
$aData = _WinAPI_EnumChildWindows($hWin)
If Not IsArray($aData) Then Exit

For $i = 1 To $aData[0][0]
	If $aData[$i][1] == $sClass Then
		$j += 1
		ReDim $aResult[$j + 1][6]
		$aResult[$j][0] = $aData[$i][1]
		$aResult[$j][1] = $aData[$i][0]
		$aResult[$j][2] = _WinAPI_GetDlgCtrlID($aData[$i][0])
		$aTemp = ControlGetPos($hWin, '', $aData[$i][0])
		If Not @error Then
			For $q = 0 To 1
				$aResult[$j][$q + 3] = $aTemp[$q]
			Next
		EndIf
		$aResult[$j][5] = ControlGetText($hWin, '', $aResult[$j][1])
	EndIf
Next
$aResult[0][0] = 'Class name'
$aResult[0][1] = 'Handle'
$aResult[0][2] = 'ID'
$aResult[0][3] = 'X'
$aResult[0][4] = 'Y'
$aResult[0][5] = 'Text'
_ArrayDisplay($aResult)

_WinAPIEx.au3.
Зачем такие огромные скриншоты?
 
Автор
W

WasonAl

Новичок
Сообщения
31
Репутация
1
Ура работает!

Код:
ControlClick ($Dialog,"","Button2")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Поясню. Если Control Viewer или AutoIt Window Info не может выделить какой-то элемент, и этот элемент действительно существует, а не является частью картинки, то значит он (элемент) перекрывается другим элементом, в данном случае Button7 (GroupBox) перекрывает Button2. В случае Control Viewer, можно либо временно "отключить" Button7, либо просто пощелкать в списке Controls, пока не найдете нужный элемент (при выделении какого-либо элемента в списке, он подсвечивается на форме). Собственно, это основное отличие Control Viewer от AutoIt Window Info.
 
Автор
W

WasonAl

Новичок
Сообщения
31
Репутация
1
Yashied сказал(а):
В случае Control Viewer, можно либо временно "отключить" Button7, либо просто пощелкать в списке Controls, пока не найдете нужный элемент (при выделении какого-либо элемента в списке, он подсвечивается на форме). Собственно, это основное отличие Control Viewer от AutoIt Window Info.

Да! Я уже понял первое - после того, как программка madmasles -а (да продлит аллах его годы!) показала мне, что искомый элемент называется Button2, я пощёлкал по списку Controls и научился первому способу нахождения нужного элемента. А как можно было временно "отключить" Button7?
 
Верх