Robot.Keyboard.Write is ready for Linux

dev-linux
Mikhail 2 years ago
parent cd3ce6e631
commit dac472da8a

@ -22,7 +22,7 @@
************************************************** **************************************************
sudo apt-get scrot (компонент для извлечения скриншотов. pyOpenRPA.Robot.Screen) sudo apt-get scrot (компонент для извлечения скриншотов. pyOpenRPA.Robot.Screen)
sudo apt-get install xclip (компонент для работы с буфером обмена. pyOpenRPA.Robot.Clipboard) sudo apt-get install xclip (компонент для работы с буфером обмена. pyOpenRPA.Robot.Clipboard)
setxkbmap: apt-get install x11-xkb-utils (компонент для взаимодействия с клавиатурой, https://command-not-found.com/setxkbmap)
************************************************** **************************************************
Проверить, что pyOpenRPA развернута корректно? Проверить, что pyOpenRPA развернута корректно?

@ -14,6 +14,22 @@
ВНИМАНИЕ! ПРИ ВЫЗОВЕ ФУНКЦИЙ ОБРАЩАЙТЕ ВНИМАНИЕ НА РЕГИСТР. ВНИМАНИЕ! ПРИ ВЫЗОВЕ ФУНКЦИЙ ОБРАЩАЙТЕ ВНИМАНИЕ НА РЕГИСТР.
************************
Доп. настройки в LINUX
************************
Используется компонент setxkbmap: apt-get install x11-xkb-utils (компонент для взаимодействия с клавиатурой, https://command-not-found.com/setxkbmap)
Особенности ОС Linux позволяют выполнять ввод разноязычного текста только через переключение раскладок клавиатуры в режиме реального времени
По умолчанию установлены следующие раскладки для Русского и английского языков:
Keyboard.KEY_RUS_LAYOUT = "ru" # NEED FOR LINUX (FOR LAYOUT SWITCH)
Keyboard.KEY_ENG_LAYOUT = "us" # NEED FOR LINUX (FOR LAYOUT SWITCH)
Проверить, что данные раскладки работают корректно, можно с помощью следующей команды в терминале:
setxkbmap -layout us,ru -option grp:alt_shift_toggle
После ввода попробуйте ввести английские символы, после чего переключиться на другой язык с помощью комбинации клавиш Alt+Shift
Если у вас используются другие layout, то вы можете указать их в переменных Keyboard.KEY_RUS_LAYOUT и Keyboard.KEY_ENG_LAYOUT для русского и английского языков соответственно.
************************************************** **************************************************
Примеры использования Примеры использования
************************************************** **************************************************

@ -1,4 +1,6 @@
from keyboard import * from pyOpenRPA.Tools import CrossOS
if CrossOS.IS_WINDOWS_BOOL: from keyboard import *
elif CrossOS.IS_LINUX_BOOL: import pyautogui, sys, os
import time import time
# Настройки модуля Keyboard # Настройки модуля Keyboard
@ -7,6 +9,7 @@ WAIT_AFTER_SEC_FLOAT = 0.4 # Время, которое ожидать посл
# ШЕСТНАДЦАТИРИЧНЫЙ СКАН-КОД В РУССКОЙ РАСКЛАДКЕ (НЕЗАВИСИМО ОТ ВЫБРАННОГО ЯЗЫКА НА КЛАВИАТУРЕ) # ШЕСТНАДЦАТИРИЧНЫЙ СКАН-КОД В РУССКОЙ РАСКЛАДКЕ (НЕЗАВИСИМО ОТ ВЫБРАННОГО ЯЗЫКА НА КЛАВИАТУРЕ)
# ОТОБРАЖЕНИЕ СКАН КОДОВ НА КЛАВИАТУРЕ https://snipp.ru/handbk/scan-codes # ОТОБРАЖЕНИЕ СКАН КОДОВ НА КЛАВИАТУРЕ https://snipp.ru/handbk/scan-codes
KEY_RUS_LAYOUT = "ru" # NEED FOR LINUX (FOR LAYOUT SWITCH)
KEY_RUS_Ф = 0x1E #A KEY_RUS_Ф = 0x1E #A
KEY_RUS_И = 0x30 #B KEY_RUS_И = 0x30 #B
KEY_RUS_С = 0x2E #C KEY_RUS_С = 0x2E #C
@ -40,7 +43,8 @@ KEY_RUS_Ю = 0x34 #>
KEY_RUS_Х = 0x1A #[ KEY_RUS_Х = 0x1A #[
KEY_RUS_Ъ = 0x1B #] KEY_RUS_Ъ = 0x1B #]
KEY_RUS_Э = 0x28 #' KEY_RUS_Э = 0x28 #'
KEY_ENG_LAYOUT = "us" # NEED FOR LINUX (FOR LAYOUT SWITCH)
KEY_ENG_A = 0x1E #A KEY_ENG_A = 0x1E #A
KEY_ENG_B = 0x30 #B KEY_ENG_B = 0x30 #B
KEY_ENG_C = 0x2E #C KEY_ENG_C = 0x2E #C
@ -68,6 +72,45 @@ KEY_ENG_X = 0x2D #X
KEY_ENG_Y = 0x15 #Y KEY_ENG_Y = 0x15 #Y
KEY_ENG_Z = 0x2C #Z KEY_ENG_Z = 0x2C #Z
KEY_ENG_TILDE = 0x29 #~
KEY_ENG_COLON = 0x27 #:
KEY_ENG_PLUS = 0x0D #+
KEY_ENG_MINUS = 0x0C #-
KEY_ENG_LESS_THAN = 0x33 #< ,
KEY_ENG_GREATER_THAN = 0x34 #> .
KEY_ENG_SOLIDUS = 0x35 #/ ?
KEY_ENG_SQUARE_BRACKET_LEFT = 0x1A #[
KEY_ENG_SQUARE_BRACKET_RIGHT = 0x1B #]
KEY_ENG_APOSTROPHE = 0x28 #' "
KEY_ENG_VERTICAL_LINE = 0x2B #| \
KEY_ENG_NUMPAD_0 = 0x52
KEY_ENG_NUMPAD_1 = 0x4F
KEY_ENG_NUMPAD_2 = 0x50
KEY_ENG_NUMPAD_3 = 0x51
KEY_ENG_NUMPAD_4 = 0x4B
KEY_ENG_NUMPAD_5 = 0x4C
KEY_ENG_NUMPAD_6 = 0x4D
KEY_ENG_NUMPAD_7 = 0x47
KEY_ENG_NUMPAD_8 = 0x48
KEY_ENG_NUMPAD_9 = 0x49
KEY_ENG_NUMPAD_ASTERISK = 0x37 #*
KEY_ENG_NUMPAD_PLUS = 0x4E
KEY_ENG_NUMPAD_MINUS = 0x4A
KEY_ENG_NUMPAD_DELETE = 0x53
KEY_ENG_NUMPAD_SOLIDUS = 0x35 #/
KEY_ENG_NUMPAD_ENTER = 0x11c
KEY_ENG_0 = 0xB
KEY_ENG_1 = 0x2
KEY_ENG_2 = 0x3
KEY_ENG_3 = 0x4
KEY_ENG_4 = 0x5
KEY_ENG_5 = 0x6
KEY_ENG_6 = 0x7
KEY_ENG_7 = 0x8
KEY_ENG_8 = 0x9
KEY_ENG_9 = 0xA
KEY_HOT_NUMPAD_0 = 0x52 KEY_HOT_NUMPAD_0 = 0x52
KEY_HOT_NUMPAD_1 = 0x4F KEY_HOT_NUMPAD_1 = 0x4F
@ -164,13 +207,50 @@ KEY_HOT_7 = 0x8
KEY_HOT_8 = 0x9 KEY_HOT_8 = 0x9
KEY_HOT_9 = 0xA KEY_HOT_9 = 0xA
MAP_RUS_ENG = { # FOR LINUX PURPOSE
"Ё":"`",
"Й":"q",
"Ц":"w",
"У":"e",
"К":"r",
"Е":"t",
"Н":"y",
"Г":"u",
"Ш":"i",
"Щ":"o",
"З":"p",
"Х":"[",
"Ъ":"]",
"Ф":"a",
"Ы":"s",
"В":"d",
"А":"f",
"П":"g",
"Р":"h",
"О":"j",
"Л":"k",
"Д":"l",
"Ж":";",
"Э":"'",
"Я":"z",
"Ч":"x",
"С":"c",
"М":"v",
"И":"b",
"Т":"n",
"Ь":"m",
"Б":",",
"Ю":"."
}
def Write(inTextStr:str, inDelayFloat:float=0, inRestoreStateAfterBool:bool=True, inExactBool:bool=None, inWaitAfterSecFloat:float=WAIT_AFTER_SEC_FLOAT): def Write(inTextStr:str, inDelayFloat:float=0, inRestoreStateAfterBool:bool=True, inExactBool:bool=None, inWaitAfterSecFloat:float=WAIT_AFTER_SEC_FLOAT):
""" """L+,W+: Печатает текст, который был передан в переменной inTextStr (поддерживает передачу в одной строке символов разного языка). Не зависит от текущей раскладки клавиатуры! Посылает искусственные клавишные события в ОС, моделируя печать данного текста. Знаки, не доступные на клавиатуре, напечатаны как явный unicode знаки, использующие определенную для ОС функциональность, такие как alt+codepoint.
Печатает текст, который был передан в переменной inTextStr (поддерживает передачу в одной строке символов разного языка). Не зависит от текущей раскладки клавиатуры! Посылает искусственные клавишные события в ОС, моделируя печать данного текста. Знаки, не доступные на клавиатуре, напечатаны как явный unicode знаки, использующие определенную для ОС функциональность, такие как alt+codepoint.
Чтобы гарантировать текстовую целостность, все в настоящее время нажатые ключи выпущены прежде текст напечатан, и модификаторы восстановлены впоследствии. Чтобы гарантировать текстовую целостность, все в настоящее время нажатые ключи выпущены прежде текст напечатан, и модификаторы восстановлены впоследствии.
ВНИМАНИЕ! ПЕЧАТАЕТ ЛЮБУЮ СТРОКУ, ДАЖЕ В СОЧЕТАНИИ НЕСКОЛЬКИХ ЯЗЫКОВ ОДНОВРЕМЕННО. ДЛЯ РАБОТЫ С ГОРЯЧИМИ КЛАВИШАМИ ИСПОЛЬЗУЙ ФУНКЦИЮ Send, Up, Down, HotkeyCombination ВНИМАНИЕ! ПЕЧАТАЕТ ЛЮБУЮ СТРОКУ, ДАЖЕ В СОЧЕТАНИИ НЕСКОЛЬКИХ ЯЗЫКОВ ОДНОВРЕМЕННО. ДЛЯ РАБОТЫ С ГОРЯЧИМИ КЛАВИШАМИ ИСПОЛЬЗУЙ ФУНКЦИЮ Send, Up, Down, HotkeyCombination
ВНИМАНИЕ! В LINUX НЕ ДЕЙСТВУЮТ СЛЕДУЮЩИЕ ПАРАМЕТРЫ: inRestoreStateAfterBool, inExactBool
.. code-block:: python .. code-block:: python
# Keyboard: Взаимодействие с клавиатурой # Keyboard: Взаимодействие с клавиатурой
@ -188,9 +268,46 @@ def Write(inTextStr:str, inDelayFloat:float=0, inRestoreStateAfterBool:bool=True
:param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию установлено в настройках модуля Keyboard (базовое значение 0.4) :param inWaitAfterSecFloat: Количество секунд, которые ожидать после выполнения операции. По умолчанию установлено в настройках модуля Keyboard (базовое значение 0.4)
:type inWaitAfterSecFloat: float, опциональный :type inWaitAfterSecFloat: float, опциональный
""" """
write(text=inTextStr, delay=inDelayFloat, restore_state_after=inRestoreStateAfterBool, exact=inExactBool) if CrossOS.IS_WINDOWS_BOOL:
write(text=inTextStr, delay=inDelayFloat, restore_state_after=inRestoreStateAfterBool, exact=inExactBool)
elif CrossOS.IS_LINUX_BOOL:
_WriteLinux(inTextStr=inTextStr, inDelayFloat=inDelayFloat)
time.sleep(inWaitAfterSecFloat) time.sleep(inWaitAfterSecFloat)
def _WriteLinux(inTextStr, inDelayFloat=0.01):
lModuleKeyboard = sys.modules[__name__]
lVarList = dir(lModuleKeyboard)
lLayoutStr = None
for lCharStr in inTextStr:
# Check rus (ru)
lVarNameStr = f"KEY_RUS_{lCharStr.upper()}"
lFoundBool = False
lShiftBool = False
if lVarNameStr in lVarList:
lNewLayoutStr=getattr(lModuleKeyboard, "KEY_RUS_LAYOUT")
lCapBool = lCharStr.isupper()
lCharStr = MAP_RUS_ENG[lCharStr.upper()]
#if lCapBool == True: lCharStr=lCharStr.upper()
if lCapBool == True: lShiftBool=True
lFoundBool=True
# Check eng (us)
lVarNameStr = f"KEY_ENG_{lCharStr.upper()}"
if lVarNameStr in lVarList and lFoundBool == False:
lNewLayoutStr=getattr(lModuleKeyboard, "KEY_ENG_LAYOUT")
lFoundBool=True
if lFoundBool == False: lNewLayoutStr=getattr(lModuleKeyboard, "KEY_ENG_LAYOUT")
# CHECK LAST LAYOUT
if lNewLayoutStr != lLayoutStr:
#print(f"setxkbmap -layout {lNewLayoutStr}")
os.system(f"setxkbmap -layout {lNewLayoutStr}")
lLayoutStr = lNewLayoutStr
if lShiftBool == True: pyautogui.keyDown('shift') # hold down the shift key
pyautogui.write(lCharStr, interval = inDelayFloat)
if lShiftBool == True: pyautogui.keyUp('shift') # hold down the shift key
# Set 2 layout with alt+shift switch
os.system(f"setxkbmap -layout {getattr(lModuleKeyboard, 'KEY_ENG_LAYOUT')},{getattr(lModuleKeyboard, 'KEY_RUS_LAYOUT')} -option grp:alt_shift_toggle")
def HotkeyCombination(*inKeyList, inDelaySecFloat = 0.3,inWaitAfterSecFloat:float=WAIT_AFTER_SEC_FLOAT): def HotkeyCombination(*inKeyList, inDelaySecFloat = 0.3,inWaitAfterSecFloat:float=WAIT_AFTER_SEC_FLOAT):
"""Получает перечень клавиш для одновременного нажатия. Между нажатиями программа ожидания время inDelaySecFloat """Получает перечень клавиш для одновременного нажатия. Между нажатиями программа ожидания время inDelaySecFloat
ВНИМАНИЕ! НЕ ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ ВНИМАНИЕ! НЕ ЗАВИСИТ ОТ ТЕКУЩЕЙ РАСКЛАДКИ КЛАВИАТУРЫ
@ -357,4 +474,4 @@ def Wait(inKeyInt:int,inWaitAfterSecFloat:float=WAIT_AFTER_SEC_FLOAT):
wait(hotkey=inKeyInt) wait(hotkey=inKeyInt)
time.sleep(inWaitAfterSecFloat) time.sleep(inWaitAfterSecFloat)
key_to_scan_codes("win") # 2022 06 10 Люблю смотреть скан код клавиши Виндовс :) if CrossOS.IS_WINDOWS_BOOL: key_to_scan_codes("win") # 2022 06 10 Люблю смотреть скан код клавиши Виндовс :)

@ -9,13 +9,21 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 1,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"import sys\n", "import sys\n",
"import os\n", "import os\n",
"sys.path.insert(0, os.path.abspath(\"..\\\\..\\\\Sources\"))\n", "#sys.path.insert(0, os.path.abspath(\"..\\\\..\\\\Sources\")) # FOR WINDOWS\n",
"sys.path.insert(0, os.path.abspath(\"../../Sources\")) # FOR LINUX\n",
"import time\n", "import time\n",
"from pyOpenRPA.Robot import Keyboard" "from pyOpenRPA.Robot import Keyboard"
] ]
@ -41,6 +49,21 @@
"print(\"done\")" "print(\"done\")"
] ]
}, },
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Keyboard: Взаимодействие с клавиатурой\n",
"from pyOpenRPA.Robot import Keyboard\n",
"import time\n",
"time.sleep(2)\n",
"Keyboard.Send(Keyboard.KEY_ENG_E)\n",
"Keyboard.Send(Keyboard.KEY_RUS_Ш)\n",
"ei"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 25, "execution_count": 25,
@ -210,246 +233,10 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{ "source": []
"data": {
"text/plain": [
"['HotkeyCombination',\n",
" 'HotkeyCtrlA_CtrlC',\n",
" 'KEY_DOWN',\n",
" 'KEY_ENG_A',\n",
" 'KEY_ENG_B',\n",
" 'KEY_ENG_C',\n",
" 'KEY_ENG_D',\n",
" 'KEY_ENG_E',\n",
" 'KEY_ENG_F',\n",
" 'KEY_ENG_G',\n",
" 'KEY_ENG_H',\n",
" 'KEY_ENG_I',\n",
" 'KEY_ENG_J',\n",
" 'KEY_ENG_K',\n",
" 'KEY_ENG_L',\n",
" 'KEY_ENG_M',\n",
" 'KEY_ENG_N',\n",
" 'KEY_ENG_O',\n",
" 'KEY_ENG_P',\n",
" 'KEY_ENG_Q',\n",
" 'KEY_ENG_R',\n",
" 'KEY_ENG_S',\n",
" 'KEY_ENG_T',\n",
" 'KEY_ENG_U',\n",
" 'KEY_ENG_V',\n",
" 'KEY_ENG_W',\n",
" 'KEY_ENG_X',\n",
" 'KEY_ENG_Y',\n",
" 'KEY_ENG_Z',\n",
" 'KEY_HOT_0',\n",
" 'KEY_HOT_1',\n",
" 'KEY_HOT_2',\n",
" 'KEY_HOT_3',\n",
" 'KEY_HOT_4',\n",
" 'KEY_HOT_5',\n",
" 'KEY_HOT_6',\n",
" 'KEY_HOT_7',\n",
" 'KEY_HOT_8',\n",
" 'KEY_HOT_9',\n",
" 'KEY_HOT_ALT_LEFT',\n",
" 'KEY_HOT_ALT_RIGHT',\n",
" 'KEY_HOT_APOSTROPHE',\n",
" 'KEY_HOT_BACKSPACE',\n",
" 'KEY_HOT_CAPS_LOCK',\n",
" 'KEY_HOT_CLEAR',\n",
" 'KEY_HOT_COLON',\n",
" 'KEY_HOT_CONTEXT_MENU',\n",
" 'KEY_HOT_CTRL_LEFT',\n",
" 'KEY_HOT_CTRL_RIGHT',\n",
" 'KEY_HOT_DELETE',\n",
" 'KEY_HOT_DOWN',\n",
" 'KEY_HOT_END',\n",
" 'KEY_HOT_ENTER',\n",
" 'KEY_HOT_ESC',\n",
" 'KEY_HOT_F1',\n",
" 'KEY_HOT_F10',\n",
" 'KEY_HOT_F11',\n",
" 'KEY_HOT_F12',\n",
" 'KEY_HOT_F13',\n",
" 'KEY_HOT_F14',\n",
" 'KEY_HOT_F15',\n",
" 'KEY_HOT_F16',\n",
" 'KEY_HOT_F17',\n",
" 'KEY_HOT_F18',\n",
" 'KEY_HOT_F19',\n",
" 'KEY_HOT_F2',\n",
" 'KEY_HOT_F20',\n",
" 'KEY_HOT_F21',\n",
" 'KEY_HOT_F22',\n",
" 'KEY_HOT_F23',\n",
" 'KEY_HOT_F24',\n",
" 'KEY_HOT_F3',\n",
" 'KEY_HOT_F4',\n",
" 'KEY_HOT_F5',\n",
" 'KEY_HOT_F6',\n",
" 'KEY_HOT_F7',\n",
" 'KEY_HOT_F8',\n",
" 'KEY_HOT_F9',\n",
" 'KEY_HOT_GREATER_THAN',\n",
" 'KEY_HOT_HOME',\n",
" 'KEY_HOT_INSERT',\n",
" 'KEY_HOT_LEFT',\n",
" 'KEY_HOT_LESS_THAN',\n",
" 'KEY_HOT_MINUS',\n",
" 'KEY_HOT_NUMPAD_0',\n",
" 'KEY_HOT_NUMPAD_1',\n",
" 'KEY_HOT_NUMPAD_2',\n",
" 'KEY_HOT_NUMPAD_3',\n",
" 'KEY_HOT_NUMPAD_4',\n",
" 'KEY_HOT_NUMPAD_5',\n",
" 'KEY_HOT_NUMPAD_6',\n",
" 'KEY_HOT_NUMPAD_7',\n",
" 'KEY_HOT_NUMPAD_8',\n",
" 'KEY_HOT_NUMPAD_9',\n",
" 'KEY_HOT_NUMPAD_ASTERISK',\n",
" 'KEY_HOT_NUMPAD_DELETE',\n",
" 'KEY_HOT_NUMPAD_ENTER',\n",
" 'KEY_HOT_NUMPAD_MINUS',\n",
" 'KEY_HOT_NUMPAD_PLUS',\n",
" 'KEY_HOT_NUMPAD_SOLIDUS',\n",
" 'KEY_HOT_NUM_LOCK',\n",
" 'KEY_HOT_PAGE_DOWN',\n",
" 'KEY_HOT_PAGE_UP',\n",
" 'KEY_HOT_PLUS',\n",
" 'KEY_HOT_PRINT_SCREEN',\n",
" 'KEY_HOT_RIGHT',\n",
" 'KEY_HOT_SCROLL_LOCK',\n",
" 'KEY_HOT_SHIFT_LEFT',\n",
" 'KEY_HOT_SHIFT_RIGHT',\n",
" 'KEY_HOT_SOLIDUS',\n",
" 'KEY_HOT_SPACE',\n",
" 'KEY_HOT_SQUARE_BRACKET_LEFT',\n",
" 'KEY_HOT_SQUARE_BRACKET_RIGHT',\n",
" 'KEY_HOT_TAB',\n",
" 'KEY_HOT_TILDE',\n",
" 'KEY_HOT_UP',\n",
" 'KEY_HOT_VERTICAL_LINE',\n",
" 'KEY_HOT_WIN_LEFT',\n",
" 'KEY_HOT_WIN_RIGHT',\n",
" 'KEY_RUS_Ё',\n",
" 'KEY_RUS_А',\n",
" 'KEY_RUS_Б',\n",
" 'KEY_RUS_В',\n",
" 'KEY_RUS_Г',\n",
" 'KEY_RUS_Д',\n",
" 'KEY_RUS_Е',\n",
" 'KEY_RUS_Ж',\n",
" 'KEY_RUS_З',\n",
" 'KEY_RUS_И',\n",
" 'KEY_RUS_Й',\n",
" 'KEY_RUS_К',\n",
" 'KEY_RUS_Л',\n",
" 'KEY_RUS_М',\n",
" 'KEY_RUS_Н',\n",
" 'KEY_RUS_О',\n",
" 'KEY_RUS_П',\n",
" 'KEY_RUS_Р',\n",
" 'KEY_RUS_С',\n",
" 'KEY_RUS_Т',\n",
" 'KEY_RUS_У',\n",
" 'KEY_RUS_Ф',\n",
" 'KEY_RUS_Х',\n",
" 'KEY_RUS_Ц',\n",
" 'KEY_RUS_Ч',\n",
" 'KEY_RUS_Ш',\n",
" 'KEY_RUS_Щ',\n",
" 'KEY_RUS_Ъ',\n",
" 'KEY_RUS_Ы',\n",
" 'KEY_RUS_Ь',\n",
" 'KEY_RUS_Э',\n",
" 'KEY_RUS_Ю',\n",
" 'KEY_RUS_Я',\n",
" 'KEY_UP',\n",
" 'KeyboardEvent',\n",
" 'Send',\n",
" 'Wait',\n",
" 'Write',\n",
" '__builtins__',\n",
" '__cached__',\n",
" '__doc__',\n",
" '__file__',\n",
" '__loader__',\n",
" '__name__',\n",
" '__package__',\n",
" '__spec__',\n",
" 'add_abbreviation',\n",
" 'add_hotkey',\n",
" 'add_word_listener',\n",
" 'all_modifiers',\n",
" 'block_key',\n",
" 'call_later',\n",
" 'clear_all_hotkeys',\n",
" 'clear_hotkey',\n",
" 'get_hotkey_name',\n",
" 'get_typed_strings',\n",
" 'hook',\n",
" 'hook_key',\n",
" 'is_modifier',\n",
" 'is_pressed',\n",
" 'key_to_scan_codes',\n",
" 'normalize_name',\n",
" 'on_press',\n",
" 'on_press_key',\n",
" 'on_release',\n",
" 'on_release_key',\n",
" 'parse_hotkey',\n",
" 'parse_hotkey_combinations',\n",
" 'play',\n",
" 'press',\n",
" 'press_and_release',\n",
" 'read_event',\n",
" 'read_hotkey',\n",
" 'read_key',\n",
" 'record',\n",
" 'register_abbreviation',\n",
" 'register_hotkey',\n",
" 'register_word_listener',\n",
" 'release',\n",
" 'remap_hotkey',\n",
" 'remap_key',\n",
" 'remove_abbreviation',\n",
" 'remove_all_hotkeys',\n",
" 'remove_hotkey',\n",
" 'remove_word_listener',\n",
" 'replay',\n",
" 'restore_modifiers',\n",
" 'restore_state',\n",
" 'send',\n",
" 'sided_modifiers',\n",
" 'start_recording',\n",
" 'stash_state',\n",
" 'stop_recording',\n",
" 'time',\n",
" 'unblock_key',\n",
" 'unhook',\n",
" 'unhook_all',\n",
" 'unhook_all_hotkeys',\n",
" 'unhook_key',\n",
" 'unregister_all_hotkeys',\n",
" 'unregister_hotkey',\n",
" 'unremap_hotkey',\n",
" 'unremap_key',\n",
" 'wait',\n",
" 'write']"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir(Keyboard)"
]
}, },
{ {
"cell_type": "code", "cell_type": "code",
@ -509,6 +296,107 @@
"k()" "k()"
] ]
}, },
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"KEY_RUS_А\" in dir(Keyboard)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "module 'pyOpenRPA.Robot.Keyboard' has no attribute 'KEY_RUS_'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mKeyboard\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mKEY_RUS_\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
"\u001b[0;31mAttributeError\u001b[0m: module 'pyOpenRPA.Robot.Keyboard' has no attribute 'KEY_RUS_'"
]
}
],
"source": [
"getattr(Keyboard, \"KEY_RUS_\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"time.sleep(3)\n",
"Keyboard.Write(\"HelloПривет!йцукенгшщзхъфывапролджэячсмитьбю.ёЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Hi anybody\", inDelayFloat=0.001)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HelloПривет!йцукенгшщзхъфывапролджэячсмитьбю.ёЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Hi anybody"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"HelloПривет!йцукенгшщзхъфывапролджэячсмитьбю.ёЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Hi anybody"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,

Loading…
Cancel
Save