Эмуляция ввода с клавиатуры



SEND-KEYS: "key_code_string"

Посылает один или несколько кодов клавиш активному окну, т. е. эмулирует ввод с клавиатуры. SEND-KEYS: может быть использован как для отправки нужному окну клавиатурного сокращения (например, CTRL+S - сохранить файл), так и для простого "печатания" текста в различных полях ввода и текстовых редакторах.

Как правильно указывать коды клавиш в качестве аргумента к слову SEND-KEYS: подробно разъясняется в главе "Коды клавиш".

Примеры:

\ печатаем слово 'test'
SEND-KEYS: "test"
\ печатаем цифры '12345' на одной строке и '67890' на другой
SEND-KEYS: "12345{ENTER}67890"

Иногда, при описании клавиатурных сокращений, возникает необходимость указать одновременно нажатые клавиши (например, нажата и удерживается клавиша CTRL и при этом нажимаются клавиши и ALT и G). В этом случае вы сначала указываете первую нажатую и удерживаемую клавишу, а все остальные окружаете круглыми скобками.

Примеры:

\ 'SHIFT+e+c'
SEND-KEYS: "+(ec)"
\ 'CTRL+SHIFT+a'
SEND-KEYS: "^(+a)"
\ 'CTRL+ALT'
SEND-KEYS: "^(@)"
\ 'WIN+F1'
SEND-KEYS: "$({F1})"

Паузу между "нажатиями" клавиш и между конструкциями SEND-KEYS: можно задать с помощью слова SEND-KEYS-DELAY:. Прямо в строке с клавиатурными кодами можно указать задежку (паузу) в миллисекундах между нажатиями двух клавиш в форме:

{DELAY time-in-ms} 

Пример:

#( test_send_keys
\ печатаем цифры '12345', потом вставляем
\ секундную паузу и "допечатываем" '67890'
NoActive
Action:
    WIN-ACTIVATE: "*Notepad"
    SEND-KEYS: "12345{DELAY 1000}67890"
)#
#( test_send_keys1
\ запускаем 'Calculator' и производим несложные вычисления Time: 0 12 * * * * Action: START-APP: calc.exe PAUSE: 500 WIN-ACTIVATE: "Calculator" PAUSE: 100 SEND-KEYS: "1{+}2{ENTER}{DELAY 2000}*3{ENTER}" )#

С помощью SEND-KEYS: можно переключать раскладку клавиатуры и "печатать" даже по-русски (или на любом другом установленном языке). Единственное ограничение: для эмуляции ввода русских букв в ГУИ-приложениях вам следует "отслеживать" текущее состояние раскладки клавиатуры. Если перед использованием SEND-KEYS: была включена английская раскладка, то после переключения раскладки на русскую, следует эмулировать нажатия соответствующих латинских литер для ввода русского текста:

\ текущая раскладка - английская.
\ 'ALT+SHIFT' - переключение раскладки клавиатуры.
WIN-ACTIVATE: "*Notepad"
PAUSE: 500
SEND-KEYS: "+(t)est @(+)ntcn @(+)test"  

Напротив, если перед использованием SEND-KEYS: русская раскладка являлась текущей для активного ГУИ-приложения, то для ввода русских букв следует указывать русские символы:

\ текущая раскладка - русская.
\ 'ALT+SHIFT' - переключение раскладки клавиатуры.
WIN-ACTIVATE: "*Notepad"
PAUSE: 500
SEND-KEYS: "+(t)est @(+)тест @(+)test"  

Соответственно, можно, например, создать такую задачу:

#( test_typing
\ устанавливаем русскую раскладку клавиатуры
: KeysToRUS SEND-KEYS: "@(+1)" ;
\ устанавливаем английскую раскладку клавиатуры
: KeysToENG SEND-KEYS: "@(+2)" ;
Action: 
   PAUSE: 1000
   KeysToRUS
   SEND-KEYS: "+(Э)то тест - " 
   KeysToENG
   SEND-KEYS: "This is a test" 
)#

Определить текущую раскладку клавиатуры для активного ГУИ приложения вы можете с помощью плагина kbd_layout.spf.

Ограничения: при составлении клавиатурных сокращений нельзя пользоваться клавишей PrtScr (PRINTSCREEN). Кроме этого, вам не удастся "отправить" программе клавиатурное сокращение CTRL+ALT+DELETE.


SEND-KEYS-DELAY: <between_keystrokes_in_ms> <between_SEND-KEYS_in_ms>

Задает задержку в миллисекундах между каждой "нажимаемой" клавишей и между каждой следующей конструкцией SEND-KEYS: (WIN-SEND-KEYS:). Позволяет эмулировать эффект "медленно" нажимаемых клавиш.

Действует на все последующие SEND-KEYS: (WIN-SEND-KEYS:) в данной задаче.

Пример:

#( test_send_keys_delay
NoActive
Action:
    START-APP: notepad.exe
    1000 PAUSE
    WIN-ACTIVATE: "*Notepad"
    500 PAUSE
    SEND-KEYS-DELAY: 500 0
    SEND-KEYS: "Typing slowly..."
)# 

См. также: