diff --git a/README.md b/README.md index 0852e4c3..3727758a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,179 @@ # OpenRPA +First open source RPA platform for business is released! -Open source RPA platform (Coming soon Q2 2019) for Windows. +How to run +Studio +Double click to Studio\StudioRun_32.cmd or Studio\StudioRun_64.cmd + +Robot how to debug +Robot\PythonDebug_64.cmd +import Robot +Robot.ActivityRun( + { + ModuleName: <"GUI"|..., str>, + ActivityName: , + ArgumentList: [, ...] - optional, + ArgumentDict: {:, ...} - optional + } +) + +Robot example script: +Robot\Examples\GetFolderList\Python_32_Script_Run.cmd + + +Python 32 bit +Resources\WPy32-3720\python-3.7.2\python.exe + +Python 64 bit +Resources\WPy64-3720\python-3.7.2.amd64\python.exe + +Module GUI activity List: +############################ +#Новая версия +############################ +#Получить список элементов, который удовлетворяет условиям через расширенный движок поиска +#[ +# { +# "index":<Позиция элемента в родительском объекте>, +# "depth_start" - глубина, с которой начинается поиск (по умолчанию 1) +# "depth_end" - глубина, до которой ведется поиск (по умолчанию 1) +# "class_name" - наименование класса, который требуется искать +# "title" - наименование заголовка +# "rich_text" - наименование rich_text +# } +#] +################ +#return: List of UI Object +#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу +#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка +#old name - PywinautoExtElementsGet +def UIOSelector_Get_UIOList (inSpecificationList,inElement=None,inFlagRaiseException=True): +################################################################################################# +#Get first (in more than one) UIO (UI Object) +#inSpecificationList - UIOSelector +#inElement - Входной элемент - показатель, что не требуется выполнять коннект к процессу +#inFlagRaiseException - Флаг True - выкинуть ошибку в случае обнаружении пустого списка +#old name - PywinautoExtElementGet +def UIOSelector_Get_UIO (inSpecificationList,inElement=None,inFlagRaiseException=True): +################################################################################################# +#Check if UIO exist (Identified by the UIOSelector) +#inSpecificationList - UIOSelector +#old name - - +def UIOSelector_Exist_Bool (inSpecificationList): +################################################################################################# +#Wait for UIO is appear (at least one of them or all at the same time) +#inSpecificationListList - List of the UIOSelector +#inWaitSecs - Время ожидания объекта в секундах +#inFlagWaitAllInMoment - доп. условие - ожидать появление всех UIOSelector одновременно +#return: [0,1,2] - index of UIOSpecification, which is appear +#old name - - +#####Внимание##### +##Функция ожидания появления элементов (тк элементы могут быть недоступны, неизвестно в каком фреймворке каждый из них может появиться) +def UIOSelectorsSecs_WaitAppear_List (inSpecificationListList,inWaitSecs,inFlagWaitAllInMoment=False): +################################################################################################# +#Wait for UIO is Disappear (at least one of them or all at the same time) +#inSpecificationListList - List of the UIOSelector +#inWaitSecs - Время ожидания пропажи объекта в секундах +#inFlagWaitAllInMoment - доп. условие - ожидать пропажу всех UIOSelector одновременно +#return: [0,1,2] - index of UIOSpecification, which is Disappear +#old name - - +#####Внимание##### +##Функция ожидания пропажи элементов (тк элементы могут быть недоступны, неизвестно в каком фреймворке каждый из них может появиться) +def UIOSelectorsSecs_WaitDisappear_List (inSpecificationListList,inWaitSecs,inFlagWaitAllInMoment=False): +################################################################################################# +#Wait for UIO is appear (at least one of them or all at the same time) +#inSpecificationList - UIOSelector +#inWaitSecs - Время ожидания объекта в секундах +#return: Bool - True - UIO is appear +#old name - - +def UIOSelectorSecs_WaitAppear_Bool (inSpecificationList,inWaitSecs): +################################################################################################# +#Wait for UIO is disappear (at least one of them or all at the same time) +#inSpecificationList - UIOSelector +#inWaitSecs - Время ожидания пропажи объекта в секундах +#return: Bool - True - UIO is Disappear +#old name - - +def UIOSelectorSecs_WaitDisappear_Bool (inSpecificationList,inWaitSecs): +################################################################################################# +#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): +########################################################################################################### +#inElementSpecificationList = UIOSelector (see description on the top of the document) +#result = pywinauto element wrapper instance or None +#old name - AutomationSearchMouseElement +def UIOSelector_SearchChildByMouse_UIO(inElementSpecification): +#################################################################################################### +#inElementSpecification - UIOSelector +#old name - AutomationSearchMouseElementHierarchy +def UIOSelector_SearchChildByMouse_UIOTree(inElementSpecification): +#################################################################################################### +#Получить список информационных объектов, который удовлетворяет условиям +#inSpecificationList - UIOSelector +#old name - PywinautoExtElementsGetInfo +def UIOSelector_Get_UIOInfoList (inSpecificationList,inElement=None): +#################################################################################################### +#Check is the UIO/UIO's by the UIOSelector exist +#inSpecificationList - UIOSelector +#old name - PywinautoExtElementExist +def UIOSelector_IsExist_Bool (inSpecificationList): +#################################################################################################### +#Wait for the UIO by the UIOSelector appear +#inSpecificationList - UIOSelector +#result - { } +#old name - PywinautoExtElementWaitAppear +############# +#Внимание! Старая функция (на замену ей пришла UIOSelectorSecs_WaitAppear_Bool) +############# +def UIOSelector_WaitAppear_Dict(inSpecificationList,inTimeout=60): +#################################################################################################### +#Try to restore (maximize) window, if it's was minimized +#(особенность uia backend - он не может прицепиться к окну, если оно свернуто) +#inSpecificationList - UIOSelector +#old name - PywinautoExtTryToRestore +def UIOSelector_TryRestore_Dict(inSpecificationList): +#################################################################################################### +#Get the list of the UI object activities +#inControlSpecificationArray - UIOSelector +#old name - ElementActionGetList +def UIOSelector_Get_UIOActivityList (inControlSpecificationArray): +#################################################################################################### +#Run the activity in UIO (UI Object) +#inControlSpecificationArray - UIOSelector +#inActionName - UIOActivity (name) from Pywinauto +#old name - ElementRunAction +def UIOSelectorUIOActivity_Run_Dict(inControlSpecificationArray,inActionName,inArgumentList=[],inkwArgumentObject={}): +#################################################################################################### +#Get the UIO dict of the attributes +#old name - ElementGetInfo +def UIOSelector_Get_UIOInfo(inControlSpecificationArray): +################################################################################################### +#Get list of child UIO's by Parent UIOSelector +#inControlSpecificationArray- UIOSelector +#old name - ElementGetChildElementList +def UIOSelector_GetChildList_UIOList(inControlSpecificationArray=[],inBackend=mDefaultPywinautoBackend): +#################################################################################################### +#Подготовить массив для обращения к поиску элемементов +#inControlSpecificationArray - UIOSelector (can be dirty) +#old name 1 - ElementSpecificationArraySearchPrepare +#old name 2 - ElementSpecificationListNormalize +def UIOSelector_SearchUIONormalize_UIOSelector (inControlSpecificationArray): +#################################################################################################### +#Подготовить массив для обращения к поиску процесса (отличается от поиска элемента, тк данная функция нужна для нормализации спецификации для подключения к процессу с окнами) +#inControlSpecificationArray - UIOSelector (can be dirty) +#old name 1 - ElementSpecificationArraySearchPrepare +#old name 2 - ElementSpecificationListNormalize +def UIOSelector_SearchProcessNormalize_UIOSelector (inControlSpecificationArray): +################################################################################################### +#inSpecificationArray - UIOSelector +#old name - ElementDrawOutlineNewFocus +def UIOSelector_FocusHighlight(inSpecificationArray) +################################################################################################### +#Highlight the UI object +#old name - ElementDrawOutlineNew +def UIOSelector_Highlight(inSpecificationArray): Dependencies * Python 3 x32 [psutil, pywinauto, wmi, PIL, keyboard, pyautogui, win32api (pywin32)] diff --git a/Resources/WPy32-3720/python-3.7.2/UnicodeLabsSite.exe b/Resources/WPy32-3720/python-3.7.2/UnicodeLabsSite.exe new file mode 100644 index 00000000..4053ac88 Binary files /dev/null and b/Resources/WPy32-3720/python-3.7.2/UnicodeLabsSite.exe differ diff --git a/Resources/WPy32-3720/python-3.7.2/test.PNG b/Resources/WPy32-3720/python-3.7.2/test.PNG new file mode 100644 index 00000000..9aaae013 Binary files /dev/null and b/Resources/WPy32-3720/python-3.7.2/test.PNG differ diff --git a/Robot/Examples/GetFolderList/Python_32_Script_Run.cmd b/Robot/Examples/GetFolderList/Python_32_Script_Run.cmd new file mode 100644 index 00000000..5d559d37 --- /dev/null +++ b/Robot/Examples/GetFolderList/Python_32_Script_Run.cmd @@ -0,0 +1,3 @@ +cd %~dp0 +.\..\..\..\Resources\WPy32-3720\python-3.7.2\python.exe Script.py +pause >nul \ No newline at end of file diff --git a/Robot/Examples/GetFolderList/Script.py b/Robot/Examples/GetFolderList/Script.py new file mode 100644 index 00000000..ad640a3d --- /dev/null +++ b/Robot/Examples/GetFolderList/Script.py @@ -0,0 +1,13 @@ +import sys +sys.path.append('../../') +import GUI +import keyboard +import subprocess +import time +#Highlight the UI Object in Folder explorer +GUI.UIOSelector_FocusHighlight([{"class_name":"CabinetWClass","backend":"uia"},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":2},{"ctrl_index":0}]) +#Wait 2 seconds +time.sleep(3) +#Loop: get child element of UI List +for lItem in GUI.UIOSelector_Get_UIO([{"class_name":"CabinetWClass","backend":"uia"},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":2},{"ctrl_index":0}]).children(): + print(str(lItem)) \ No newline at end of file diff --git a/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd b/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd deleted file mode 100644 index 1de6dbbf..00000000 --- a/Robot/Examples/PythonDebug_32_ScriptTestGUI.cmd +++ /dev/null @@ -1,3 +0,0 @@ -cd %~dp0 -.\..\..\Resources\WPy32-3720\python-3.7.2\python.exe ScriptTestGUI.py -pause >nul \ No newline at end of file diff --git a/Robot/Examples/ScriptTestGUI.py b/Robot/Examples/ScriptTestGUI.py deleted file mode 100644 index ba554883..00000000 --- a/Robot/Examples/ScriptTestGUI.py +++ /dev/null @@ -1,15 +0,0 @@ -import sys -sys.path.append('../') -import GUI -import keyboard -import time -lI=0 -lResult=GUI.UIOSelectorsSecs_WaitDisappear_List( - [ - [{"title":"PuTTY Configuration","class_name":"PuTTYConfigBox","backend":"uia"},{"ctrl_index":20},{"ctrl_index":2}], - [{"title":"OpenRPA","class_name":"CabinetWClass","backend":"uia"},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":2},{"ctrl_index":0},{"ctrl_index":7},{"ctrl_index":2}] - ], - 60, - True -) -print(lResult) \ No newline at end of file