From bb69a1a9b1cfdf1d26d73b47461da2e9ebb319cb Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Fri, 10 Jun 2022 19:14:41 +0300 Subject: [PATCH] pyOpenRPA.Robot.Keyboard fixes --- Sources/pyOpenRPA/Robot/Keyboard.py | 84 ++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/Sources/pyOpenRPA/Robot/Keyboard.py b/Sources/pyOpenRPA/Robot/Keyboard.py index dc50d73b..b95d3153 100644 --- a/Sources/pyOpenRPA/Robot/Keyboard.py +++ b/Sources/pyOpenRPA/Robot/Keyboard.py @@ -166,7 +166,7 @@ def Write(inTextStr:str, inDelayFloat:float=0, inRestoreStateAfterBool:bool=True Печатает текст, который был передан в переменной inTextStr (поддерживает передачу в одной строке символов разного языка). Не зависит от текущей раскладки клавиатуры! Посылает искусственные клавишные события в ОС, моделируя печать данного текста. Знаки, не доступные на клавиатуре, напечатаны как явный unicode знаки, использующие определенную для ОС функциональность, такие как alt+codepoint. Чтобы гарантировать текстовую целостность, все в настоящее время нажатые ключи выпущены прежде текст напечатан, и модификаторы восстановлены впоследствии. - ВНИМАНИЕ! НЕ ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ + ВНИМАНИЕ! ПЕЧАТАЕТ ЛЮБУЮ СТРОКУ, ДАЖЕ В СОЧЕТАНИИ НЕСКОЛЬКИХ ЯЗЫКОВ ОДНОВРЕМЕННО. ДЛЯ РАБОТЫ С ГОРЯЧИМИ КЛАВИШАМИ ИСПОЛЬЗУЙ ФУНКЦИЮ Send, Up, Down, HotkeyCombination .. code-block:: python @@ -189,7 +189,7 @@ def Write(inTextStr:str, inDelayFloat:float=0, inRestoreStateAfterBool:bool=True time.sleep(inWaitAfterSecFloat) def HotkeyCombination(*inKeyList, inDelaySecFloat = 0.3,inWaitAfterSecFloat:float=0.4): - """Получает перечень кнопок для одновременного нажатия. Между нажатиями программа ожидания время inDelaySecFloat + """Получает перечень клавиш для одновременного нажатия. Между нажатиями программа ожидания время inDelaySecFloat ВНИМАНИЕ! НЕ ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ .. code-block:: python @@ -201,7 +201,7 @@ def HotkeyCombination(*inKeyList, inDelaySecFloat = 0.3,inWaitAfterSecFloat:floa Keyboard.HotkeyCombination(Keyboard.KEY_HOT_CTRL_LEFT,Keyboard.KEY_ENG_A) Keyboard.HotkeyCombination(Keyboard.KEY_HOT_ALT_LEFT,Keyboard.KEY_HOT_TAB, Keyboard.KEY_HOT_TAB) - :param inKeyList: Список клавиш для одновременного нажатия. Перечень кнопок см. в разделе "Коды кнопок". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A + :param inKeyList: Список клавиш для одновременного нажатия. Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A :param inDelaySecFloat: Интервал между нажатиями. Необходим в связи с тем, что операционной системе требуется время на реакцию на нажатие клавиш, по умолчанию: 0.3 :type inDelaySecFloat: float, опционально :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию 0.4 @@ -241,41 +241,101 @@ def HotkeyCtrlA_CtrlC(inWaitAfterSecFloat:float=0.4) -> None: def Send(inKeyInt:int, inDoPressBool:bool=True, inDoReleaseBool:bool=True,inWaitAfterSecFloat:float=0.4) -> None: """ - Посылает событие в операционную систему, которые выполняет нажатие и отпускание данной клавиши - ВНИМАНИЕ! ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ + Имитация нажатия/отпускания любой физической клавиши. Посылает событие в операционную систему, которые выполняет нажатие и отпускание данной клавиши + + ВНИМАНИЕ! ПРИ ПОПЫТКЕ ПЕЧАТИ ТЕКСТА БУДЕТ УЧИТЫВАТЬ ТЕКУЩУЮ РАСКЛАДКУ КЛАВИАТУРЫ. ДЛЯ ПЕЧАТИ ТЕКСТА ИСПОЛЬЗУЙ Write! .. code-block:: python # Keyboard: Взаимодействие с клавиатурой from pyOpenRPA.Robot import Keyboard - Keyboard.Send(Keyboard.KEY_ENG_A) # Нажать кноку A. Если будет активна русская раскладка, то будет выведена буква ф. + Keyboard.Send(Keyboard.KEY_ENG_A) # Нажать клавишу A. Если будет активна русская раскладка, то будет выведена буква ф. - :param inKeyInt: Перечень кнопок см. в разделе "Коды кнопок". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A + :param inKeyInt: Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A :type inKeyInt: int - :param inDoPressBool: Выполнить событие нажатия кнопки, По умолчанию True + :param inDoPressBool: Выполнить событие нажатия клавиши, По умолчанию True :type inDoPressBool: bool, опционально - :param inDoReleaseBool: Выполнить событие отпускания кнопки, По умолчанию True + :param inDoReleaseBool: Выполнить событие отпускания клавиши, По умолчанию True :type inDoReleaseBool: bool, опционально :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию 0.4 :type inWaitAfterSecFloat: float, опционально """ send(hotkey=inKeyInt, do_press=inDoPressBool, do_release=inDoReleaseBool) time.sleep(inWaitAfterSecFloat) + +def Up(inKeyInt:int, inWaitAfterSecFloat:float=0.4) -> None: + """ + Отпустить (поднять) клавишу. Если клавиша уже была поднята, то ничего не произойдет. + + ВНИМАНИЕ! ПРИ ПОПЫТКЕ ПЕЧАТИ ТЕКСТА БУДЕТ УЧИТЫВАТЬ ТЕКУЩУЮ РАСКЛАДКУ КЛАВИАТУРЫ. ДЛЯ ПЕЧАТИ ТЕКСТА ИСПОЛЬЗУЙ Write! + + .. code-block:: python + + # Keyboard: Взаимодействие с клавиатурой + from pyOpenRPA.Robot import Keyboard + Keyboard.Up(Keyboard.KEY_ENG_A) # Отпустить клавишу A. + + :param inKeyInt: Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT, KEY_ENG_A + :type inKeyInt: int + :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию 0.4 + :type inWaitAfterSecFloat: float, опционально + """ + send(hotkey=inKeyInt, do_press=False, do_release=True) + time.sleep(inWaitAfterSecFloat) + +def Down(inKeyInt:int, inWaitAfterSecFloat:float=0.4) -> None: + """ + Нажать (опустить) клавишу. Если клавиша уже была опущена, то ничего не произойдет. + + ВНИМАНИЕ! ПРИ ПОПЫТКЕ ПЕЧАТИ ТЕКСТА БУДЕТ УЧИТЫВАТЬ ТЕКУЩУЮ РАСКЛАДКУ КЛАВИАТУРЫ. ДЛЯ ПЕЧАТИ ТЕКСТА ИСПОЛЬЗУЙ Write! + + .. code-block:: python + + # Keyboard: Взаимодействие с клавиатурой + from pyOpenRPA.Robot import Keyboard + Keyboard.Down(Keyboard.KEY_ENG_A) # Отпустить клавишу A. + + :param inKeyInt: Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT, KEY_ENG_A + :type inKeyInt: int + :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию 0.4 + :type inWaitAfterSecFloat: float, опционально + """ + send(hotkey=inKeyInt, do_press=True, do_release=False) + time.sleep(inWaitAfterSecFloat) + +def IsDown(inKeyInt:int) -> bool: + """ + Проверить, опущена ли клавиша. Вернет True если опущена; False если поднята. + + ВНИМАНИЕ! ПРИ ПОПЫТКЕ ПЕЧАТИ ТЕКСТА БУДЕТ УЧИТЫВАТЬ ТЕКУЩУЮ РАСКЛАДКУ КЛАВИАТУРЫ. ДЛЯ ПЕЧАТИ ТЕКСТА ИСПОЛЬЗУЙ Write! + + .. code-block:: python + + # Keyboard: Взаимодействие с клавиатурой + from pyOpenRPA.Robot import Keyboard + lKeyAIsPressedBool = Keyboard.IsDown(Keyboard.KEY_ENG_A) # Проверить, опущена ли клавиша A. + + :param inKeyInt: Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT, KEY_ENG_A + :type inKeyInt: int + """ + return is_pressed(inKeyInt) def Wait(inKeyInt:int,inWaitAfterSecFloat:float=0.4): - """Блокирует осуществление программы, пока данная обозначенная кнопка не будет нажата. + """Блокирует осуществление программы, пока данная обозначенная клавиша не будет нажата. ВНИМАНИЕ! НЕ ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ. ОЖИДАЕТ НАЖАТИЕ СООТВЕТСВУЮЩЕЙ ФИЗИЧЕСКОЙ КЛАВИШИ .. code-block:: python # Keyboard: Взаимодействие с клавиатурой from pyOpenRPA.Robot import Keyboard - Keyboard.Wait(Keyboard.KEY_ENG_A) # Ждать нажатие кнопки A. + Keyboard.Wait(Keyboard.KEY_ENG_A) # Ждать нажатие клавиши A. - :param inKeyInt: Перечень кнопок см. в разделе "Коды кнопок". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A + :param inKeyInt: Перечень клавиш см. в разделе "Коды клавиш". Пример: KEY_HOT_CTRL_LEFT,KEY_ENG_A :type inKeyInt: int :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию 0.4 :type inWaitAfterSecFloat: float, опционально """ wait(hotkey=inKeyInt) time.sleep(inWaitAfterSecFloat) + +key_to_scan_codes("win") # 2022 06 10 Люблю смотреть скан код клавиши Виндовс :) \ No newline at end of file