@ -7,7 +7,10 @@ from . import Mouse
if CrossOS . IS_WINDOWS_BOOL :
if CrossOS . IS_WINDOWS_BOOL :
from pywinauto import win32defines , win32structures , win32functions
from pywinauto import win32defines , win32structures , win32functions
import time
IMAGE_WAIT_SEC_FLOAT = 60
IMAGE_WAIT_INTERVAL_SEC_FLOAT = 1.0
def BoxCreate ( inTopInt : int , inLeftInt : int , inHeightInt : int , inWidthInt : int ) - > pyscreeze . Box :
def BoxCreate ( inTopInt : int , inLeftInt : int , inHeightInt : int , inWidthInt : int ) - > pyscreeze . Box :
@ -489,7 +492,7 @@ def ImageLocateAll(inImgPathStr:str, inIsGrayModeBool:bool=False, inConfidenceFl
# Screen: Взаимодействие с объектами экрана
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA . Robot import Screen
from pyOpenRPA . Robot import Screen
Screen . LocateAll( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
Screen . Image LocateAll( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: type inImgPathStr : str , относительный или абсолютный
: type inImgPathStr : str , относительный или абсолютный
@ -500,4 +503,110 @@ def ImageLocateAll(inImgPathStr:str, inIsGrayModeBool:bool=False, inConfidenceFl
: return : Список из pyscreeze . Box
: return : Список из pyscreeze . Box
: rtype : list
: rtype : list
"""
"""
return pyautogui . locateAllOnScreen ( image = inImgPathStr , grayscale = inIsGrayModeBool , confidence = inConfidenceFloat )
lResult = [ ]
for lItem in pyautogui . locateAllOnScreen ( image = inImgPathStr , grayscale = inIsGrayModeBool , confidence = inConfidenceFloat ) :
lResult . append ( lItem )
return lResult
def ImageExists ( inImgPathStr : str , inIsGrayModeBool : bool = False , inConfidenceFloat : float = 1.0 ) - > list :
""" Проверить, имеется ли на экране хотя бы один подходящий объект. Вернуть булево значение
. . code - block : : python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA . Robot import Screen
lResult = Screen . ImageExists ( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: type inImgPathStr : str , относительный или абсолютный
: param inIsGrayModeBool : True - выполнить поиск изображения в режиме серых оттенков ( ускоряет производительность , если допускается искажение цвета ) . По умолчанию False
: type inIsGrayModeBool : bool , опционально
: param inConfidenceFloat : Показатель точности . 1.0 - идентичное соответствие , 0.0 - полное несоответствие . По умолчанию 1.0
: type inConfidenceFloat : float , опционально
: return : Список из pyscreeze . Box
: rtype : list
"""
return len ( ImageLocateAll ( inImgPathStr = inImgPathStr , inIsGrayModeBool = inIsGrayModeBool , inConfidenceFloat = inConfidenceFloat ) ) > 0
def ImageWaitAppear ( inImgPathStr : str , inWaitSecFloat : float = IMAGE_WAIT_SEC_FLOAT , inWaitIntervalSecFloat : float = IMAGE_WAIT_INTERVAL_SEC_FLOAT , inIsGrayModeBool : bool = False , inConfidenceFloat : float = 1.0 ) - > list :
""" Ожидать появление изображения на протяжении inWaitSecFloat секунд. Проверять с периодичностью inWaitIntervalSecFloat. Вернуть список прямоугольных областей, которые удовлетворяют условию
. . code - block : : python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA . Robot import Screen
lBoxList = Screen . ImageWaitAppear ( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: type inImgPathStr : str , относительный или абсолютный
: param inWaitSecFloat : Время ожидания появления изображения в сек . По умолчанию IMAGE_WAIT_SEC_FLOAT ( 60 )
: type inWaitSecFloat : float , опциональный
: param inWaitIntervalSecFloat : Интервал повторной проверки наличия изображения . По умолчанию IMAGE_WAIT_INTERVAL_SEC_FLOAT ( 1 )
: type inWaitIntervalSecFloat : float , опциональный
: param inIsGrayModeBool : True - выполнить поиск изображения в режиме серых оттенков ( ускоряет производительность , если допускается искажение цвета ) . По умолчанию False
: type inIsGrayModeBool : bool , опционально
: param inConfidenceFloat : Показатель точности . 1.0 - идентичное соответствие , 0.0 - полное несоответствие . По умолчанию 1.0
: type inConfidenceFloat : float , опционально
: return : Список из pyscreeze . Box или [ ] если прошло время ожидания .
: rtype : list
"""
lStartSecFloat = time . time ( )
lResultList = [ ]
while time . time ( ) - lStartSecFloat < inWaitSecFloat :
lResultList = ImageLocateAll ( inImgPathStr = inImgPathStr , inIsGrayModeBool = inIsGrayModeBool , inConfidenceFloat = inConfidenceFloat )
if len ( lResultList ) > 0 : break
time . sleep ( inWaitIntervalSecFloat )
return lResultList
def ImageWaitDisappear ( inImgPathStr : str , inWaitSecFloat : float = IMAGE_WAIT_SEC_FLOAT , inWaitIntervalSecFloat : float = IMAGE_WAIT_INTERVAL_SEC_FLOAT , inIsGrayModeBool : bool = False , inConfidenceFloat : float = 1.0 ) :
""" Ожидать исчезновение изображения на протяжении inWaitSecFloat секунд. Проверять с периодичностью inWaitIntervalSecFloat.
. . code - block : : python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA . Robot import Screen
Screen . ImageWaitDisappear ( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: type inImgPathStr : str , относительный или абсолютный
: param inWaitSecFloat : Время ожидания появления изображения в сек . По умолчанию IMAGE_WAIT_SEC_FLOAT ( 60 )
: type inWaitSecFloat : float , опциональный
: param inWaitIntervalSecFloat : Интервал повторной проверки наличия изображения . По умолчанию IMAGE_WAIT_INTERVAL_SEC_FLOAT ( 1 )
: type inWaitIntervalSecFloat : float , опциональный
: param inIsGrayModeBool : True - выполнить поиск изображения в режиме серых оттенков ( ускоряет производительность , если допускается искажение цвета ) . По умолчанию False
: type inIsGrayModeBool : bool , опционально
: param inConfidenceFloat : Показатель точности . 1.0 - идентичное соответствие , 0.0 - полное несоответствие . По умолчанию 1.0
: type inConfidenceFloat : float , опционально
"""
lStartSecFloat = time . time ( )
lResultList = [ ]
while time . time ( ) - lStartSecFloat < inWaitSecFloat :
lResultList = ImageLocateAll ( inImgPathStr = inImgPathStr , inIsGrayModeBool = inIsGrayModeBool , inConfidenceFloat = inConfidenceFloat )
if len ( lResultList ) == 0 : break
time . sleep ( inWaitIntervalSecFloat )
return lResultList
def ImageClick ( inImgPathStr : str , inBoxIndexInt : int = 0 , inPointRuleStr : str = " CC " , inIsGrayModeBool : bool = False , inConfidenceFloat : float = 1.0 ) :
""" Выполнить поиск прямоугольной области по изображению.
. . code - block : : python
# Screen: Взаимодействие с объектами экрана
from pyOpenRPA . Robot import Screen
Screen . ImageClick ( inImgPathStr = " Button.png " , inConfidenceFloat = 0.9 )
: param inImgPathStr : Путь к изображению , которое требуется искать на экране
: type inImgPathStr : str , относительный или абсолютный
: param inBoxIndexInt : Индекс прямоугольной области , по которой выполнить клик ( если обнаружено несколько областей Box ) , По умолчанию 0
: type inBoxIndexInt : int , опционально
: param inPointRuleStr : Правило идентификации точки на прямоугольной области ( правила формирования см . выше ) . Варианты : " LU " , " CU " , " RU " , " LC " , " CC " , " RC " , " LD " , " CD " , " RD " . По умолчанию " CC "
: type inPointRuleStr : str , опциональный
: param inIsGrayModeBool : True - выполнить поиск изображения в режиме серых оттенков ( ускоряет производительность , если допускается искажение цвета ) . По умолчанию False
: type inIsGrayModeBool : bool , опционально
: param inConfidenceFloat : Показатель точности . 1.0 - идентичное соответствие , 0.0 - полное несоответствие . По умолчанию 1.0
: type inConfidenceFloat : float , опционально
"""
PointClick ( BoxGetPoint ( inBox = ImageLocateAll ( inImgPathStr = inImgPathStr , inIsGrayModeBool = inIsGrayModeBool , inConfidenceFloat = inConfidenceFloat ) [ inBoxIndexInt ] , inPointRuleStr = inPointRuleStr ) )