Что нового

[Автоматизация] Последовательное обращение к окнам многооконного приложения

bugmenot

Новичок
Сообщения
17
Репутация
0
Доброго времени суток.
Недавно обсуждалась тема, где необходимо было попеременно обращаться к окнам копий одного приложения. (http://autoit-script.ru/index.php/topic,14441.0.html)
У меня возникла, как мне кажется, подобного рода задача, но имеющая свою особенность.
Необходимо последовательно обращаться к n-ому количеству окон (дочерних?) в рамках одного многооконного приложения.
Используя Autoit v3 Window Info определяется заголовок главного(родительского) окна, но интересующие меня дочерние окна имеют тот же title, поэтому обращаться по title не подходит. (То есть получается, что дочерние окна выступают элементами(Controls) главного окна?). Дочерние от родительского отличаются значением Control: главное имеет Class - MDIClient, а дочернее - InfoMDIQChart. Дочерние друг от друга отличаются значением ID.
Вот и стоит вопрос как обратиться к дочерним окном для дальнейшей манипуляции с ними.

Что касается конкретно моей задачи:
Есть программа Quik(интернет торговля), в ней открыто много окон с графиками различных бумаг. Моя задача стоит в том, чтобы попеременно разворачивать очередное окно, нажимать правой кнопкой мыши на графике для вызова контекстного меню, выбирать пункт меню "Сохранить график", нажать "Сохранить" и так с некоторой периодичностью для всех окон с графиками.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bugmenot,
Посмотрите функцию _WinAPI_EnumProcessWindows() из WinAPIEx.au3.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
bugmenot

OffTopic:
Все придумано до нас


Код:
#include <WinAPIEx.au3>

Global $sOkno = '[CLASS:InfoClass]'

$aData = _WinAPI_EnumChildWindows(WinGetHandle($sOkno), 0)

For $i = 1 To $aData[0][0]
	If $aData[$i][1] = 'InfoMDIQChart' Then _Gr($aData[$i][0])
Next

Func _Gr($hHwnd)
	_WinAPI_SetForegroundWindow($hHwnd)
	Local $sText = ControlGetText($sOkno, '', $hHwnd)
	Sleep(300)
	WinMenuSelectItem($sOkno, '', '&Экспорт данных', '&Графики', 'Сохранить в файл...')
	WinWait('Выберите файл для экспорта графика', '')
	ControlSetText('Выберите файл для экспорта графика', '', 'Edit1', $sText & '.bmp')
	ControlClick('Выберите файл для экспорта графика', '', 'Button1')
	WinWaitClose('Выберите файл для экспорта графика', '')
	Sleep(300)
EndFunc   ;==>_Gr
 
Верх