#TreeViewFix #PywinautoExtElementGet_v1(only index)

dev-linux
Ivan Maslov 6 years ago
parent 2066821eb8
commit 6c5b5abd03

@ -64,7 +64,7 @@
///Функция визуализации дерева
mGlobal.ElementTree.fRender = function(inElementsTreeDataArray)
{
var lHTMLList='<div class="ui list">';
var lHTMLList='<div class="ui list" style="height:350px;overflow:scroll;">';
///Циклический обход списка
for (var i = 0; i< inElementsTreeDataArray.length;i++) {
///Добавить HTML код позиции

@ -16,8 +16,8 @@ from threading import Timer
mFlagIsDebug=False
mPywinautoApplication=pywinauto.Application(backend="win32")
mPywinautoActiveBackend="win32"
#mPywinautoActiveBackend="uia"
#mPywinautoActiveBackend="win32"
mPywinautoActiveBackend="uia"
#mPywinautoApplication=pywinauto.Application(backend="uia")
#####
@ -50,7 +50,7 @@ def AutomationSearchMouseElement(inElementSpecification,inFlagIsSearchOnline=Tru
lElementFounded={}
#Создать карту пикселей и элементов
#####Внимание! Функция GUISearchElementByRootXY не написана
lElementFounded=GUISearchElementByRootXY(GetControl(inElementSpecification),lX,lY)
lElementFounded=GUISearchElementByRootXY(PywinautoExtElementGet(inElementSpecification),lX,lY)
#Подсветить объект, если он мышь раньше стояла на другом объекте
if lGUISearchElementSelected != lElementFounded:
lGUISearchElementSelected = lElementFounded
@ -66,7 +66,7 @@ def AutomationSearchMouseElement(inElementSpecification,inFlagIsSearchOnline=Tru
else:
lBitmap={}
#Создать карту пикселей и элементов
lBitmap=GUISearchBitmapCreate(GetControl(inElementSpecification),lBitmap)
lBitmap=GUISearchBitmapCreate(PywinautoExtElementGet(inElementSpecification),lBitmap)
#Выдать сообщение, что поиск готов к использованию
#print("GUISearch: Ready for search!")
###########
@ -145,6 +145,7 @@ def PywinautoExtElementCtrlIndexGet(inElement):
lElementParentChildrenList = lElementParent.children()
#Циклический поиск до того момента, пока не упремся в текущий элемент
while lFlagFind:
if lResult<len(lElementParentChildrenList):
#Прекратить поиск, если элемент был обнаружен
if inElement == lElementParentChildrenList[lResult]:
lFlagFind = False
@ -155,9 +156,45 @@ def PywinautoExtElementCtrlIndexGet(inElement):
lFlagFind = False
else:
lResult = lResult + 1
else:
lResult=-1
lFlagFind=False
#Вернуть результат
return lResult
#Получить элемент через расширенный движок поиска
#[ {
#"index":<Позиция элемента в родительском объекте>,
#
#} ]
def PywinautoExtElementGet (inSpecificationList,inElement=None):
lResult=None
lChildElement=None
#Получить родительский объект если на вход ничего не поступило
if inElement is None:
#сформировать спецификацию на получение элемента
lRootElementSpecification=[inSpecificationList[0]]
lChildElement=GetControl(lRootElementSpecification)
#Елемент на вход поступил - выполнить его анализ
else:
#Поступил index
if 'index' in inSpecificationList[0]:
lChildrenList=inElement.children()
if inSpecificationList[0]['index']<len(lChildrenList):
#Получить дочерний элемент
lChildElement=lChildrenList[inSpecificationList[0]['index']]
#Поступил ctrl_index
elif 'ctrl_index' in inSpecificationList[0]:
lChildrenList=inElement.children()
if inSpecificationList[0]['ctrl_index']<len(lChildrenList):
#Получить дочерний элемент
lChildElement=lChildrenList[inSpecificationList[0]['ctrl_index']]
#Выполнить рекурсивный вызов, если спецификация больше одного элемента
if len(inSpecificationList)>1 and lChildElement is not None:
#Вызвать рекурсивно функцию получения следующего объекта, если в спецификации есть следующий объект
lResult=PywinautoExtElementGet(inSpecificationList[1:],lChildElement)
else:
lResult=lChildElement
return lResult
################################
#Функция повторяющегося таймера
#############################
@ -272,9 +309,9 @@ def GetControl(inControlSpecificationArray):
#Получить массив свойств и методов у элемента
def ElementActionGetList (inControlSpecificationArray):
#Получить объект
lObject=GetControl(inControlSpecificationArray)
lActionList=dir(lObject.wrapper_object())
lResult=dir(lObject.wrapper_object())
lObject=PywinautoExtElementGet(inControlSpecificationArray)
lActionList=dir(lObject)
lResult=dir(lObject)
#Выполнить чистку списка от неактуальных методов
for lActionItem in lActionList:
#Удалить те, которые начинаются на _
@ -287,9 +324,9 @@ def ElementActionGetList (inControlSpecificationArray):
#Выполнить действие над элементом
def ElementRunAction(inControlSpecificationArray,inActionName,inArgumentList=[],inkwArgumentObject={}):
#Определить объект
lObject=GetControl(inControlSpecificationArray)
lObject=PywinautoExtElementGet(inControlSpecificationArray)
#Получить метод для вызова
lFunction = getattr(lObject.wrapper_object(), inActionName)
lFunction = getattr(lObject, inActionName)
#Выполнить действие
return lFunction(*inArgumentList,**inkwArgumentObject)
@ -300,9 +337,9 @@ def ElementGetInfo(inControlSpecificationArray):
lResultList=[];
if len(inControlSpecificationArray) > 0:
#Получить объект
lTempObject=GetControl(inControlSpecificationArray)
lTempObject=PywinautoExtElementGet(inControlSpecificationArray)
#Получить инфо объект
lTempObjectInfo = lTempObject.wrapper_object().element_info
lTempObjectInfo = lTempObject.element_info
#Добавить информацию об обнаруженом объекте
lResultList.append(ElementInfoExportObject(lTempObjectInfo));
return lResultList
@ -554,9 +591,9 @@ def ElementGetChildElementList(inControlSpecificationArray=[]):
#ctypes.windll.user32.MessageBoxW(0, str(inControlSpecificationArray), "Your title", 1)
if len(inControlSpecificationArray) > 0:
#Получить объект
lTempObject = GetControl(inControlSpecificationArray)
lTempObject = PywinautoExtElementGet(inControlSpecificationArray)
#Получить список дочерних объектов
lTempChildList = lTempObject.wrapper_object().children()
lTempChildList = lTempObject.children()
lIterator=0
#Подготовить результирующий объект
for lChild in lTempChildList:
@ -823,10 +860,10 @@ def GetRootElementList():
lResultList2.append(ElementInfoExportObject(lI));
return lResultList2
def ElementDrawOutlineNew(inSpecificationArray):
draw_outline_new(GetControl(inSpecificationArray))
draw_outline_new(PywinautoExtElementGet(inSpecificationArray))
return
def ElementDrawOutlineNewFocus(inSpecificationArray):
draw_outline_new_focus(GetControl(inSpecificationArray))
draw_outline_new_focus(PywinautoExtElementGet(inSpecificationArray))
return
def draw_outline_new(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None,inFlagSetFocus=False):
if lWrapperObject is not None:
@ -842,7 +879,7 @@ def draw_outline_new(lWrapperObject,colour='green',thickness=2,fill=win32defines
if inFlagSetFocus:
#Установить фокус на объект, чтобы было видно выделение
lWrapperObject.set_focus()
time.sleep(0.5)
#pdb.set_trace()
# don't draw if dialog is not visible
#if not lWrapperObject.is_visible():

Loading…
Cancel
Save