@ -192,9 +192,9 @@ def PywinautoExtElementsGet (inSpecificationList,inElement=None):
if inElement is None :
#сформировать спецификацию на получение элемента
lRootElementSpecification = [ inSpecificationList [ 0 ] ]
l ChildrenList. append ( GetControl ( lRootElementSpecification ) )
if l ChildrenList[ 0 ] is not None :
lChildrenList [ 0 ] = lChildrenList [ 0 ] . wrapper_object ( )
l RootElement= GetControl ( lRootElementSpecification )
if l RootElement is not None :
lChildrenList . append ( lRootElement . wrapper_object ( ) )
#Елемент на вход поступил - выполнить е г о анализ
else :
#Получить список элементов
@ -263,6 +263,15 @@ def PywinautoExtElementsGet (inSpecificationList,inElement=None):
else :
lResultList . extend ( lChildrenList )
return lResultList
#Получить список информационных объектов, который удовлетворяет условиям
def PywinautoExtElementsGetInfo ( inSpecificationList , inElement = None ) :
#Получить родительский объект если на вход ничего не поступило
lResultList = PywinautoExtElementsGet ( inSpecificationList , inElement )
lIterator = 0
for lItem in lResultList :
lResultList [ lIterator ] = ElementInfoExportObject ( lResultList [ lIterator ] . element_info )
lIterator = lIterator + 1
return lResultList
#Получить элемент через расширенный движок поиска
#[ {
#"index":<Позиция элемента в родительском объекте>,
@ -275,6 +284,31 @@ def PywinautoExtElementGet (inSpecificationList,inElement=None):
if len ( lResultList ) > 0 :
lResult = lResultList [ 0 ]
return lResult
#Проверить, существует ли объект
def PywinautoExtElementExist ( inSpecificationList ) :
#pdb.set_trace()
return len ( PywinautoExtElementsGet ( inSpecificationList ) ) > 0
#Ожидать появления элемента
def PywinautoExtElementWaitAppear ( inSpecificationList , inTimeout = 60 ) :
lTimeoutSeconds = 0
while ( not PywinautoExtElementExist ( inSpecificationList ) and inTimeout > lTimeoutSeconds ) :
lTimeoutSeconds = lTimeoutSeconds + 0.5
#Заснуть на полсекунды
time . sleep ( 0.5 )
return PywinautoExtElementExist ( inSpecificationList )
#Функция, которая попытается восстановить окно, если оно есть, но свернуто (особенность uia backend - он не может прицепиться к окну, если оно свернуто)
def PywinautoExtTryToRestore ( inSpecificationList ) :
#pdb.set_trace()
try :
#Подготовка взодного массива
inControlSpecificationArray = ElementSpecificationArraySearchPrepare ( inSpecificationList )
#Выполнить подключение к объекту
lRPAApplication = pywinauto . Application ( backend = " win32 " )
lRPAApplication . connect ( * * inSpecificationList [ 0 ] )
lRPAApplication . top_window ( ) . restore ( )
except Exception :
True == False
################################
#Функция повторяющегося таймера
#############################
@ -371,19 +405,28 @@ def GetControl(inControlSpecificationArray):
inControlSpecificationArray = ElementSpecificationArraySearchPrepare ( inControlSpecificationArray )
#Выполнить идентификацию объектов, если передан массив
lResultList = [ ] ;
lTempObject = None
if len ( inControlSpecificationArray ) > 0 :
#Выполнить подключение к объекту
lRPAApplication = pywinauto . Application ( backend = mPywinautoActiveBackend )
#Проверка разрядности
lRPAApplication . connect ( * * inControlSpecificationArray [ 0 ] )
#lTempObject=lRPAApplication.window(**inControlSpecificationArray[0])
#Скорректировано из-за недопонимания структуры
lTempObject = lRPAApplication
#Нормализация массива для целей выборки объекта (удаление конфликтующих ключей)
inControlSpecificationArray = ElementSpecificationListNormalize ( inControlSpecificationArray )
#Циклическое прохождение к недрам объекта
for lWindowSpecification in inControlSpecificationArray [ 0 : ] :
lTempObject = lTempObject . window ( * * lWindowSpecification )
try :
lRPAApplication . connect ( * * inControlSpecificationArray [ 0 ] )
except Exception as e :
PywinautoExtTryToRestore ( inControlSpecificationArray )
try :
lRPAApplication . connect ( * * inControlSpecificationArray [ 0 ] )
except Exception as e :
lRPAApplication = None
if lRPAApplication is not None :
#lTempObject=lRPAApplication.window(**inControlSpecificationArray[0])
#Скорректировано из-за недопонимания структуры
lTempObject = lRPAApplication
#Нормализация массива для целей выборки объекта (удаление конфликтующих ключей)
inControlSpecificationArray = ElementSpecificationListNormalize ( inControlSpecificationArray )
#Циклическое прохождение к недрам объекта
for lWindowSpecification in inControlSpecificationArray [ 0 : ] :
lTempObject = lTempObject . window ( * * lWindowSpecification )
return lTempObject
#Получить массив свойств и методов у элемента
@ -1037,7 +1080,9 @@ def GeneralClipboardSet(inText):
win32clipboard . EmptyClipboard ( )
win32clipboard . SetClipboardText ( inText )
win32clipboard . CloseClipboard ( )
#Уснуть на 2 секунды
def GeneralSleep2s ( ) :
time . sleep ( 2 )
#run()
lText = " Bitness: " + str ( struct . calcsize ( " P " ) * 8 )