@ -2,6 +2,7 @@ from pyautogui import *
import pyscreeze
import pyscreeze
import ctypes
import ctypes
from pyOpenRPA . Tools import CrossOS
from pyOpenRPA . Tools import CrossOS
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
@ -308,4 +309,174 @@ def BoxOverlay(inBox1, inBox2) -> bool:
: return : True - inBox1 наложен на inBox2
: return : True - inBox1 наложен на inBox2
: rtype : bool
: rtype : bool
"""
"""
return not ( ( inBox1 . left > inBox2 . left + inBox2 . width or inBox2 . left > inBox1 . left + inBox1 . width ) or ( inBox1 . top > inBox2 . top + inBox2 . height or inBox2 . top > inBox1 . top + inBox1 . height ) )
return not ( ( inBox1 . left > inBox2 . left + inBox2 . width or inBox2 . left > inBox1 . left + inBox1 . width ) or ( inBox1 . top > inBox2 . top + inBox2 . height or inBox2 . top > inBox1 . top + inBox1 . height ) )
def BoxGetPoint ( inBox , inPointRuleStr = " CC " ) - > pyscreeze . Point :
""" Получить точку pyscreeze.Point по заданной прямоугольной области pyscreeze.Box и строковому параметру расположения inPointRuleStr.
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lBox1 = Screen . BoxCreate ( inTopInt = 10 , inLeftInt = 10 , inHeightInt = 100 , inWidthInt = 1000 )
lPoint = Screen . BoxGetPoint ( inBox = lBox1 , inPointRuleStr = " LC " )
: param inBox : Прямоугольная область на экране
: type inBox : pyscreeze . Box , обязательный
: param inPointRuleStr : Правило идентификации точки на прямоугольной области ( правила формирования см . выше ) . Варианты : " LU " , " CU " , " RU " , " LC " , " CC " , " RC " , " LD " , " CD " , " RD " . По умолчанию " CC "
: type inPointRuleStr : str , опциональный
: return : Точка на экране
: rtype : pyscreeze . Point
"""
inPointRuleStr = inPointRuleStr . upper ( )
if " CC " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width / 2 , y = inBox . top + inBox . height / 2 )
elif " LU " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left , y = inBox . top )
elif " RU " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width , y = inBox . top )
elif " CU " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width / 2 , y = inBox . top )
elif " LC " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left , y = inBox . top + inBox . height / 2 )
elif " RC " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width , y = inBox . top + inBox . height / 2 )
elif " LD " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left , y = inBox . top + inBox . height )
elif " CD " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width / 2 , y = inBox . top + inBox . height )
elif " RD " in inPointRuleStr : return pyscreeze . Point ( x = inBox . left + inBox . width , y = inBox . top + inBox . height )
def PointModify ( inPoint , inDXInt , inDYInt ) - > pyscreeze . Point :
""" Скорректировать точку pyscreeze.Point.
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( inXInt = 10 , inYInt = 10 )
lPoint = Screen . PointModify ( inPoint = lPoint , inDXInt = 90 , inDYInt = 10 )
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inDXInt : Смещение указателя мыши по оси X ( горизонтальная ось ) .
: type inDXInt : int , опциональный
: param inDYInt : Смещение указателя мыши по оси Y ( вертикальная ось ) .
: type inDYInt : int , опциональный
: return : Точка на экране
: rtype : pyscreeze . Point
"""
return PointCreate ( inXInt = inPoint . x + inDXInt , inYInt = inPoint . y + inDYInt )
def PointCreate ( inXInt , inYInt ) :
""" Создать точку pyscreeze.Point.
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( inXInt = 10 , inYInt = 10 )
: param inXInt : Смещение указателя мыши по оси X ( горизонтальная ось ) .
: type inXInt : int , опциональный
: param inYInt : Смещение указателя мыши по оси Y ( вертикальная ось ) .
: type inYInt : int , опциональный
: return : Точка на экране
: rtype : pyscreeze . Point
"""
return pyscreeze . Point ( x = inXInt , y = inYInt )
def PointClick ( inPoint : pyscreeze . Point , inClickCountInt : int = 1 , inIntervalSecFloat : float = 0.0 , inButtonStr : str = ' left ' , inMoveDurationSecFloat : float = 0.0 , inWaitAfterSecFloat : float = None ) :
""" Нажатие (вниз) кнопки мыши и затем немедленно выпуск (вверх) её. Допускается следующая параметризация.
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( 100 , 150 )
Screen . PointClick ( lPoint ) #Выполнить нажатие левой клавиши мыши
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inClickCountInt : Количество нажатий ( вниз и вверх ) кнопкой мыши , По умолчанию 1
: type inClickCountInt : int , опциональный
: param inIntervalSecFloat : Интервал ожидания в секундах между нажатиями , По умолчанию 0.0
: type inIntervalSecFloat : float , опциональный
: param inButtonStr : Номер кнопки , которую требуется нажать . Возможные варианты : ' left ' , ' middle ' , ' right ' или 1 , 2 , 3. В остальных случаях инициирует исключение ValueError . По умолчанию ' left '
: type inButtonStr : str , опциональный
: param inMoveDurationSecFloat : Время перемещения указателя мыши , По умолчанию 0.0 ( моментальное перемещение )
: type inMoveDurationSecFloat : float , опциональный
: param inWaitAfterSecFloat : Количество секунд , которые ожидать после выполнения операции . По умолчанию установлено в настройках модуля Mouse ( базовое значение 0.4 )
: type inWaitAfterSecFloat : float , опциональный
"""
Mouse . Click ( inXInt = inPoint . x , inYInt = inPoint . y , inClickCountInt = inClickCountInt , inIntervalSecFloat = inIntervalSecFloat , inButtonStr = inButtonStr , inMoveDurationSecFloat = inMoveDurationSecFloat , inWaitAfterSecFloat = inWaitAfterSecFloat )
def PointClickDouble ( inPoint : pyscreeze . Point , inWaitAfterSecFloat : float = None ) :
""" Двойное нажатие левой клавиши мыши. Данное действие аналогично вызову функции (см. ниже).
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( 100 , 150 )
Screen . PointClickDouble ( lPoint ) #Выполнить двойное нажатие левой клавиши мыши
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inWaitAfterSecFloat : Количество секунд , которые ожидать после выполнения операции . По умолчанию установлено в настройках модуля Mouse ( базовое значение 0.4 )
: type inWaitAfterSecFloat : float , опциональный
"""
Mouse . ClickDouble ( inXInt = inPoint . x , inYInt = inPoint . y , inWaitAfterSecFloat = inWaitAfterSecFloat )
def PointDown ( inPoint : pyscreeze . Point , inButtonStr : str = ' left ' , inWaitAfterSecFloat : float = None ) :
""" Переместить указатель по координатам inPoint, после чего нажать (вниз) клавишу мыши и не отпускать до выполнения соответсвующей команды (см. Up).
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( 100 , 150 )
Screen . PointDown ( lPoint )
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inButtonStr : Номер кнопки , которую требуется нажать . Возможные варианты : ' left ' , ' middle ' , ' right ' или 1 , 2 , 3. В остальных случаях инициирует исключение ValueError . По умолчанию ' left '
: type inButtonStr : str , опциональный
: param inWaitAfterSecFloat : Количество секунд , которые ожидать после выполнения операции . По умолчанию установлено в настройках модуля Mouse ( базовое значение 0.4 )
: type inWaitAfterSecFloat : float , опциональный
"""
Mouse . Down ( inXInt = inPoint . x , inYInt = inPoint . y , inButtonStr = inButtonStr , inWaitAfterSecFloat = inWaitAfterSecFloat )
def PointUp ( inPoint : pyscreeze . Point , inButtonStr : str = ' left ' , inWaitAfterSecFloat : float = None ) :
""" Отпустить (вверх) клавишу мыши.
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( 100 , 150 )
Screen . PointUp ( lPoint )
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inButtonStr : Номер кнопки , которую требуется поднять . Возможные варианты : ' left ' , ' middle ' , ' right ' или 1 , 2 , 3. В остальных случаях инициирует исключение ValueError . По умолчанию ' left '
: type inButtonStr : str , опциональный
: param inWaitAfterSecFloat : Количество секунд , которые ожидать после выполнения операции . По умолчанию установлено в настройках модуля Mouse ( базовое значение 0.4 )
: type inWaitAfterSecFloat : float , опциональный
"""
Mouse . Down ( inXInt = inPoint . x , inYInt = inPoint . y , inButtonStr = inButtonStr , inWaitAfterSecFloat = inWaitAfterSecFloat )
def PointMoveTo ( inPoint : pyscreeze . Point , inMoveDurationSecFloat : float = 0.0 , inWaitAfterSecFloat : float = None ) :
""" Переместить указатель мыши на позицию inXInt, inYInt за время inMoveDurationSecFloat.
! ВНИМАНИЕ ! Отсчет координат inXInt , inYInt начинается с левого верхнего края рабочей области ( экрана ) .
. . code - block : : python
# Screen: Взаимодействие с мышью объектами экрана
from pyOpenRPA . Robot import Screen
lPoint = Screen . PointCreate ( 100 , 150 )
Mouse . PointMoveTo ( inXInt = 100 , inYInt = 200 )
: param inPoint : Точка на экране , по которой выполнить нажатие мыши
: type inPoint : pyscreeze . Point , обязательный
: param inMoveDurationSecFloat : Время перемещения указателя мыши , По умолчанию 0.0 ( моментальное перемещение )
: type inMoveDurationSecFloat : float , опциональный
: param inWaitAfterSecFloat : Количество секунд , которые ожидать после выполнения операции . По умолчанию установлено в настройках модуля Mouse ( базовое значение 0.4 )
: type inWaitAfterSecFloat : float , опциональный
"""
Mouse . Down ( inXInt = inPoint . x , inYInt = inPoint . y , inMoveDurationSecFloat = inMoveDurationSecFloat , inWaitAfterSecFloat = inWaitAfterSecFloat )