From b3fe9759f163487bfe4944cc6b0cd6b8b50edac6 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Thu, 9 Jun 2022 18:00:20 +0300 Subject: [PATCH] Add Mouse wiki (RUS) --- Sources/pyOpenRPA/Robot/Mouse.py | 75 +++++- Utils/Jupyter-notebooks/Keyboard.ipynb | 220 ++++++++++++++++++ Utils/Jupyter-notebooks/Mouse.ipynb | 63 +++++ .../jupyter-notebook-run.cmd | 3 + 4 files changed, 360 insertions(+), 1 deletion(-) create mode 100644 Utils/Jupyter-notebooks/Keyboard.ipynb create mode 100644 Utils/Jupyter-notebooks/Mouse.ipynb create mode 100644 Utils/Jupyter-notebooks/jupyter-notebook-run.cmd diff --git a/Sources/pyOpenRPA/Robot/Mouse.py b/Sources/pyOpenRPA/Robot/Mouse.py index 49af0760..654d5ffc 100644 --- a/Sources/pyOpenRPA/Robot/Mouse.py +++ b/Sources/pyOpenRPA/Robot/Mouse.py @@ -1 +1,74 @@ -from pyautogui import * \ No newline at end of file +from pyautogui import * + +def Click(inXInt:int=None, inYInt:int=None, inClickCountInt:int=1, inIntervalSecFloat:float=0.0, inButtonStr:str='left', inMoveDurationSecFloat:float=0.0): + """Нажатие (вниз) кнопки мыши и затем немедленно выпуск (вверх) её. Допускается следующая параметризация. Если не указаны inXInt и inYInt - клик производится по месту нахождения указателя мыши. + + !ВНИМАНИЕ! Отсчет координат inXInt, inYInt начинается с левого верхнего края рабочей области (экрана). + + :param inXInt: Целевая позиция указателя мыши по оси X (горизонтальная ось). + :type inXInt: int, опционально + :param inYInt: Целевая позиция указателя мыши по оси Y (вертикальная ось). + :type inYInt: int, опционально + :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, опционально + """ + click(x=inXInt, y=inYInt, clicks=inClickCountInt, interval=inIntervalSecFloat, button=inButtonStr, duration=inMoveDurationSecFloat) + +def ClickDouble(inXInt:int=None, inYInt:int=None): + """Двойное нажатие левой клавиши мыши. Данное действие аналогично вызову функции (см. ниже). + + !ВНИМАНИЕ! Отсчет координат inXInt, inYInt начинается с левого верхнего края рабочей области (экрана). + + .. code-block:: python + Click(inXInt, inYInt, inClickCountInt=2, inIntervalSecFloat:float=0.0, inButtonStr:str='left', inMoveDurationSecFloat:float=0.0) + + :param inXInt: Целевая позиция указателя мыши по оси X (горизонтальная ось). + :type inXInt: int, опционально + :param inYInt: Целевая позиция указателя мыши по оси Y (вертикальная ось). + :type inYInt: int, опционально + """ + doubleClick(x=inXInt, y=inYInt) + +def Down(inXInt:int=None, inYInt:int=None): + """Нажать (вниз) клавишу мыши и не отпускать до выполнения соответсвующей команды (см. Up). Если координаты inXInt, inYInt не переданы - нажатие происходит на тех координатах X/Y, на которых указатель мыши находится. + + !ВНИМАНИЕ! Отсчет координат inXInt, inYInt начинается с левого верхнего края рабочей области (экрана). + + :param inXInt: Целевая позиция указателя мыши по оси X (горизонтальная ось). + :type inXInt: int, опционально + :param inYInt: Целевая позиция указателя мыши по оси Y (вертикальная ось). + :type inYInt: int, опционально + """ + mouseDown(x=inXInt, y=inYInt) + +def Up(inXInt:int=None, inYInt:int=None): + """Отпустить (вверх) клавишу мыши. Если координаты inXInt, inYInt не переданы - нажатие происходит на тех координатах X/Y, на которых указатель мыши находится. + + !ВНИМАНИЕ! Отсчет координат inXInt, inYInt начинается с левого верхнего края рабочей области. + + :param inXInt: Целевая позиция указателя мыши по оси X (горизонтальная ось). + :type inXInt: int, опционально + :param inYInt: Целевая позиция указателя мыши по оси Y (вертикальная ось). + :type inYInt: int, опционально + """ + mouseUp(x=inXInt, y=inYInt) + +def MoveTo(inXInt=None, inYInt=None, inMoveDurationSecFloat:float=0.0): + """Переместить указатель мыши на позицию inXInt, inYInt за время inMoveDurationSecFloat. + + !ВНИМАНИЕ! Отсчет координат inXInt, inYInt начинается с левого верхнего края рабочей области (экрана). + + :param inXInt: Целевая позиция указателя мыши по оси X (горизонтальная ось). + :type inXInt: int, опционально + :param inYInt: Целевая позиция указателя мыши по оси Y (вертикальная ось). + :type inYInt: int, опционально + :param inMoveDurationSecFloat: Время перемещения указателя мыши, По умолчанию 0.0 (моментальное перемещение) + :type inMoveDurationSecFloat: float, опционально + """ + moveTo(x=inXInt, y=inYInt, duration=inMoveDurationSecFloat) \ No newline at end of file diff --git a/Utils/Jupyter-notebooks/Keyboard.ipynb b/Utils/Jupyter-notebooks/Keyboard.ipynb new file mode 100644 index 00000000..67e4e8f9 --- /dev/null +++ b/Utils/Jupyter-notebooks/Keyboard.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Тест функций pyOpenRPA.Robot.Keyboard" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "sys.path.insert(0, os.path.abspath(\"..\\\\..\\\\Sources\"))\n", + "import time\n", + "from pyOpenRPA.Robot import Keyboard" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "\n", + "time.sleep(1)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT,Keyboard.KEY_ENG_A)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT,Keyboard.KEY_ENG_C)\n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "time.sleep(2)\n", + "Keyboard.press(Keyboard.KEY_HOT_SHIFT_LEFT)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "time.sleep(2)\n", + "Keyboard.HotkeyCtrlA_CtrlC()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "time.sleep(2)\n", + "Keyboard.send(Keyboard.KEY_HOT_CONTEXT_MENU)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "Keyboard.wait(Keyboard.KEY_ENG_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "time.sleep(1)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT,Keyboard.KEY_ENG_A)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT,Keyboard.KEY_ENG_C)\n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "time.sleep(4)\n", + "\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_WIN_LEFT,Keyboard.KEY_ENG_R)\n", + "Keyboard.Write(\"cmd\")\n", + "Keyboard.Send(Keyboard.KEY_HOT_ENTER, inWaitAfterSecFloat=0.6)\n", + "Keyboard.Write(\"echo %time%\")\n", + "Keyboard.Send(Keyboard.KEY_HOT_ENTER)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT, Keyboard.KEY_ENG_A, inWaitAfterSecFloat=0.6)\n", + "Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT, Keyboard.KEY_ENG_C, inWaitAfterSecFloat=0.6)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "57435" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Keyboard.KEY_HOT_WIN_LEFT" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "pass" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(75,)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Keyboard.key_to_scan_codes(\"left\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.2" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Utils/Jupyter-notebooks/Mouse.ipynb b/Utils/Jupyter-notebooks/Mouse.ipynb new file mode 100644 index 00000000..21f8e17a --- /dev/null +++ b/Utils/Jupyter-notebooks/Mouse.ipynb @@ -0,0 +1,63 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pyOpenRPA.Robot import Mouse" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.2" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Utils/Jupyter-notebooks/jupyter-notebook-run.cmd b/Utils/Jupyter-notebooks/jupyter-notebook-run.cmd new file mode 100644 index 00000000..3c5665a3 --- /dev/null +++ b/Utils/Jupyter-notebooks/jupyter-notebook-run.cmd @@ -0,0 +1,3 @@ +cd %~dp0..\..\Resources\WPy64-3720\python-3.7.2.amd64 +copy /Y python.exe jupyter-notebook.exe +jupyter-notebook.exe -m notebook --notebook-dir=%~dp0 \ No newline at end of file