#Robot_AddedGUIPython_64 #GUI_BitnessCheck

dev-linux
Ivan Maslov 6 years ago
parent 2f3e63ef02
commit d7a5afca33

@ -197,6 +197,23 @@ def UIOSelector_Get_UIO (inSpecificationList,inElement=None):
lResult=lResultList[0] lResult=lResultList[0]
return lResult return lResult
#################################################################################################
#Get process bitness (32 or 64)
#inSpecificationList - UIOSelector
#old name - None
#return None (if Process not found), int 32, or int 64
def UIOSelector_Get_BitnessInt (inSpecificationList):
lResult=None
#pdb.set_trace()
#Получить объект Application (Для проверки разрядности)
lRootElement=PWASpecification_Get_PWAApplication(inSpecificationList)
if lRootElement is not None:
if lRootElement.is64bit():
lResult=64
else:
lResult=32
return lResult
################################################################################################## ##################################################################################################
#inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation #inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation
#Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element #Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element
@ -237,6 +254,41 @@ def PWASpecification_Get_UIO(inControlSpecificationArray):
for lWindowSpecification in inControlSpecificationArray[0:]: for lWindowSpecification in inControlSpecificationArray[0:]:
lTempObject=lTempObject.window(**lWindowSpecification) lTempObject=lTempObject.window(**lWindowSpecification)
return lTempObject return lTempObject
##################################################################################################
#inControlSpecificationArray - List of dict, dict in pywinauto.find_windows notation
#Backend selection - attribute "backend" ("win32" || "uia") in 1-st list element
#return process application object
#old name - None
def PWASpecification_Get_PWAApplication(inControlSpecificationArray):
#Определение backend
lBackend=mDefaultPywinautoBackend
#pdb.set_trace()
if "backend" in inControlSpecificationArray[0]:
lBackend=inControlSpecificationArray[0]["backend"]
inControlSpecificationArray[0].pop("backend")
#Подготовка входного массива
inControlSpecificationOriginArray=inControlSpecificationArray
inControlSpecificationArray=UIOSelector_SearchProcessNormalize_UIOSelector(inControlSpecificationArray)
#Выполнить идентификацию объектов, если передан массив
lResultList=[];
lTempObject=None
if len(inControlSpecificationArray) > 0:
#Выполнить подключение к объекту
lRPAApplication = pywinauto.Application(backend=lBackend)
#Проверка разрядности
try:
lRPAApplication.connect(**inControlSpecificationArray[0])
except Exception as e:
UIOSelector_TryRestore_Dict(inControlSpecificationArray)
try:
lRPAApplication.connect(**inControlSpecificationArray[0])
except Exception as e:
lRPAApplication = None
if lRPAApplication is not None:
#lTempObject=lRPAApplication.window(**inControlSpecificationArray[0])
#Скорректировано из-за недопонимания структуры
lTempObject=lRPAApplication
return lTempObject
########################################################################################################### ###########################################################################################################
#inElementSpecificationList = UIOSelector (see description on the top of the document) #inElementSpecificationList = UIOSelector (see description on the top of the document)
@ -945,7 +997,7 @@ if not mFlagIsDebug:
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject() lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции #Выполнить вызов функции
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictList(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict'])) lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrInt(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e: except Exception as e:
#Установить флаг ошибки #Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True lProcessResponse["ErrorFlag"]=True

@ -65,5 +65,15 @@ def JSONNormalizeDictList(inDictList):
if type(inDictList) is list: if type(inDictList) is list:
lResult=JSONNormalizeList(inDictList) lResult=JSONNormalizeList(inDictList)
return lResult; return lResult;
def JSONNormalizeDictListStrInt(inDictListStrInt):
lResult=None
if type(inDictListStrInt) is dict:
lResult=JSONNormalizeDict(inDictListStrInt)
if type(inDictListStrInt) is list:
lResult=JSONNormalizeList(inDictListStrInt)
if type(inDictListStrInt) is str:
lResult=inDictListStrInt
if type(inDictListStrInt) is int:
lResult=inDictListStrInt
return lResult;

@ -4,6 +4,7 @@ import zlib
import sys import sys
import os import os
import JSONNormalize import JSONNormalize
import pdb
############################################ ############################################
####Межпроцессное взаимодействие ####Межпроцессное взаимодействие
############################################ ############################################
@ -78,6 +79,7 @@ def ProcessChildSendString(lProcess,lString):
#ProcessChildReadWaitString #ProcessChildReadWaitString
def ProcessChildReadWaitString(lProcess): def ProcessChildReadWaitString(lProcess):
#Ожидаем ответ от процесса #Ожидаем ответ от процесса
#pdb.set_trace()
lResult = lProcess.stdout.readline() lResult = lProcess.stdout.readline()
#Обработка спец символов #Обработка спец символов
#print(b'NewLine: '+lResult) #print(b'NewLine: '+lResult)

@ -9,6 +9,7 @@ import traceback
import logging import logging
import sys import sys
import datetime import datetime
import struct
#Создать файл логирования #Создать файл логирования
# add filemode="w" to overwrite # add filemode="w" to overwrite
if not os.path.exists("Reports"): if not os.path.exists("Reports"):
@ -61,8 +62,11 @@ logging.basicConfig(filename="Reports\ReportRobotRun_"+datetime.datetime.now().s
#Start childprocess - GUI Module 32 bit #Start childprocess - GUI Module 32 bit
mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe','..\\Robot\\GUI.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe','..\\Robot\\GUI.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation #Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation
#mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2\\python.exe','GUI.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) lProcessBitnessStr = str(struct.calcsize("P") * 8)
#start 64 if system support 64
mProcessGUI_x64= None
if (struct.calcsize("P") * 8) == 64:
mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe','GUI.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#################### ####################
#Section: Activity #Section: Activity
@ -76,6 +80,19 @@ def ActivityRun(inActivitySpecificationDict):
if "ArgumentDict" not in inActivitySpecificationDict: if "ArgumentDict" not in inActivitySpecificationDict:
inActivitySpecificationDict["ArgumentDict"]={} inActivitySpecificationDict["ArgumentDict"]={}
#TODO: Доделать определение разрядности (32 и 64) #TODO: Доделать определение разрядности (32 и 64)
######################################################
#Выполнить проверку разрядности через UIOSelector_Get_BitnessInt
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_BitnessInt","ArgumentList":inActivitySpecificationDict["ArgumentList"],"ArgumentDict":inActivitySpecificationDict["ArgumentDict"]})
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)
#pdb.set_trace()
if lResponseObject["Result"]==64:
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x64,inActivitySpecificationDict)
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x64)
elif lResponseObject["Result"]==32:
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,inActivitySpecificationDict) ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,inActivitySpecificationDict)
#Получить ответ от дочернего процесса #Получить ответ от дочернего процесса

Loading…
Cancel
Save