Функция Send

         Описание функции


Send

Эмулирует нажатие клавиш в активном окне.

Send ( "keys" [, flag = 0 ] )

Параметры

keys Последовательность нажимаемых клавиш.
flag [необязательный] Изменяет интерпретацию параметра keys:
0 - (по умолчанию), текст содержит специальные символы, такие как + и !, указывающие на нажатия Shift и Alt.
1 - клавиши как есть (спец-символы {}^+! как обычный текст).

Примечания

AutoIt может эмулировать нажатия всех символов ASCII и дополнительных ASCII символов (0-255), чтобы отправить символы UNICODE вы должны использовать опцию "ASC" и код символа, который нужно эмулировать (см. {ASC nnnn} в таблице ниже).

Синтаксис команды Send аналогичен одноимённой в ScriptIt и команде "SendKeys" в Visual Basic. Символы эмулируются как есть, за исключением следующих:

'!'
Это указывает AutoIt эмулировать клавишу Alt, поэтому Send("This is text!a") выполнит ввод текста "This is text" и затем нажмёт "Alt+a".

Обратите внимание: некоторые программы очень разборчивы в регистре символов и клавиш Alt, т.е. "!A" отличается от "!a". Первый эмулирует Alt+Shift+A, второй Alt+a. Если сомневаетесь, используйте нижний регистр символов!

'+'
Это указывает AutoIt эмулировать клавишу Shift, поэтому Send("Hell+o") выполнит ввод текста "HellO". Send("!+a") эмулирует нажатие "Alt+Shift+a".

'^'
Это указывает AutoIt эмулировать клавишу Ctrl, поэтому Send("^!a") эмулирует нажатие "Ctrl+Alt+a".

Обратите внимание: некоторые программы очень разборчивы в регистре символов и клавиш Ctrl, т.е. "^A" отличается от "^a". Первый эмулирует Ctrl+Shift+A, второй Ctrl+a. Если сомневаетесь, используйте нижний регистр символов!

'#'
"Решётка" теперь эмулирует клавишу Windows; поэтому, Send("#r") эмулирует нажатие Win+r, который запускает диалоговое окно "Выполнить".


Вы можете использовать SendCapslockMode, чтобы отключить CAPS LOCK перед выполнением функции Send и восстановить после выполнения.
Однако, если пользователь удерживает нажатой клавишу Shift, когда выполняется функция Send, то текст может быть эмулирован в верхнем регистре.
Один из способов обхода данной проблемы - Send("{SHIFTDOWN}{SHIFTUP}") перед последующим вызовом Send.

Некоторые клавиатуры, например Чешская, посылают различные символы при использовании клавиши Shift во включённом и выключенном состоянии Caps Lock. Реализация Send в AutoIt такова, что символы В ВЕРХНЕМ РЕГИСТРЕ отсылаются так, как если бы был нажат Shift, так что оно не будет работать.

Некоторые спец-клавиши могут эмулированы, если заключены в фигурные скобки:

Обратите внимание, Windows не позволяет эмулировать сочетание Ctrl+Alt+Del!
Команда (если flag=0)Результат эмуляции
{!}!
{#}#
{+}+
{^}^
{{}{
{}}}
{SPACE}SPACE (пробел)
{ENTER}Enter основной клавиатуры
{ALT}ALT
{BACKSPACE} или {BS}Backspace
{DELETE} или {DEL}Delete
{UP}Стрелка вверх
{DOWN}Стрелка вниз
{LEFT}Стрелка влево
{RIGHT}Стрелка вправо
{HOME}Home
{END}End
{ESCAPE} или {ESC}Esc (Escape)
{INSERT} или {INS}Insert (Ins)
{PGUP}PageUp
{PGDN}PageDown
{F1} - {F12}Функциональные клавиши
{TAB}Tab
{PRINTSCREEN}Клавиша Print Screen (Prt Scr SysRq)
{LWIN}Левая клавиша Windows
{RWIN}Правая клавиша Windows
{NUMLOCK on}Num Lock (on/off/toggle) (включить/выключить/переключить)
{CAPSLOCK off}Caps Lock (on/off/toggle) (включить/выключить/переключить)
{SCROLLLOCK toggle}Scroll Lock (on/off/toggle) (включить/выключить/переключить)
{BREAK}для Ctrl+Break
{PAUSE}Pause
{NUMPAD0} - {NUMPAD9}Цифры (цифровая клавиатура)
{NUMPADMULT}* (цифровая клавиатура)
{NUMPADADD}+ (цифровая клавиатура)
{NUMPADSUB}- (цифровая клавиатура)
{NUMPADDIV}/ (цифровая клавиатура)
{NUMPADDOT}. (цифровая клавиатура)
{NUMPADENTER}Enter (цифровая клавиатура)
{APPSKEY}Клавиша Windows App
{LALT}Левый Alt
{RALT}Правый Alt
{LCTRL}Левый Ctrl
{RCTRL}Правый Ctrl
{LSHIFT}Левый Shift
{RSHIFT}Правый Shift
{SLEEP}Клавиша спящего режима компьютера
{ALTDOWN}Удерживать Alt в нажатом состоянии, до {ALTUP}
{SHIFTDOWN}Удерживать Shift в нажатом состоянии, до {SHIFTUP}
{CTRLDOWN}Удерживать Ctrl в нажатом состоянии, до {CTRLUP}
{LWINDOWN}Удерживать левый Windows в нажатом состоянии, до {LWINUP}
{RWINDOWN}Удерживать правый Windows в нажатом состоянии, до {RWINUP}
{ASC nnnn}Выслать клавишу, указав её номер
{BROWSER_BACK}Только в 2000/XP: Кнопка "назад" в окне просмотра
{BROWSER_FORWARD}Только в 2000/XP: Кнопка "вперёд" в окне просмотра
{BROWSER_REFRESH}Только в 2000/XP: Кнопка "обновить" в окне просмотра
{BROWSER_STOP}Только в 2000/XP: Кнопка "остановить" в окне просмотра
{BROWSER_SEARCH}Только в 2000/XP: Кнопка "поиск" в окне просмотра
{BROWSER_FAVORITES}Только в 2000/XP: Кнопка "избранное" в окне просмотра
{BROWSER_HOME}Только в 2000/XP: Запускает браузер и переходит на домашнюю страницу
{VOLUME_MUTE}Только в 2000/XP: Выключить звук
{VOLUME_DOWN}Только в 2000/XP: Уменьшить звук (на 4% от 100)
{VOLUME_UP}Только в 2000/XP: Увеличить звук (на 4% от 100)
{MEDIA_NEXT}Только в 2000/XP: Следующий трек в медиа-плеере
{MEDIA_PREV}Только в 2000/XP: Предыдущий трек в медиа-плеере
{MEDIA_STOP}Только в 2000/XP: Остановить воспроизведение в медиа-плеере
{MEDIA_PLAY_PAUSE}Только в 2000/XP: Воспроизведение / пауза в медиа-плеере
{LAUNCH_MAIL}Только в 2000/XP: Запуск почтовой программы
{LAUNCH_MEDIA}Только в 2000/XP: Запуск медиа плеера
{LAUNCH_APP1}Только в 2000/XP: Запуск первой программы пользователя
{LAUNCH_APP2}Только в 2000/XP: Запуск второй программы пользователя

Чтобы эмулировать ASCII символ A (тоже, что нажатие ALT+065 на цифровой клавиатуре)

Send("{ASC 065}")


(Когда используется двухзначный код ASCII вы должны подставить в начало 0, иначе будет использована устаревшая кодовая страница 437).

Чтобы эмулировать символ UNICODE вводите код символа (десятичный или шестнадцатеричный), например это эмулирует китайский символ

Send("{ASC 2709}")
Send("{ASC 0xA95}")



Одиночную эмуляцию можно повторить, например:

Send("{DEL 4}") ; Эмулирует нажатие клавиши Del 4 раза
Send("{S 30}") ; Эмулирует нажатие клавиши 'S' 30 раз
Send("+{TAB 4}") ; Эмулирует нажатие Shift+Tab 4 раза


Клавиша эмулируется не менее одного раза, даже если указано 0 повторов.

Удерживать клавишу в нажатом состоянии (обычно полезно только для игр)

Send("{a down}") ; Удерживать клавишу A нажатой
Send("{a up}") ;Отпустить клавишу A


Устанавливает состояние клавиш CapsLock, NumLock или ScrollLock

Send("{NumLock on}") ;Включает NumLock
Send("{CapsLock off}") ;Выключает CapsLock
Send("{ScrollLock toggle}") ;Переключает состояние ScrollLock


Если вы хотите указать количество нажатий в переменной, попробуйте

$n = 4
Send("+{TAB " & $n & "}")


Если вы хотите эмулировать ASCII символ "A" четыре раза, то попробуйте

$x = Chr(65)
Send("{" & $x & " 4}")


Большинство клавиатур ноутбуков имеют специальную клавишу Fn. Эта клавиша не может быть эмулирована.

Примечание: если параметр flag равен 1, то интерпретация спецсимволов в параметре keys будет отключена. Это полезно, если вы хотите выслать текст, скопированный из переменной, и выслать текст именно так, как он написан.

Send очень полезна потому, что навигация в Windows может осуществляться без использования мыши.
Например, откройте "Свойства папки" (в панели управления) и попробуйте выполнить следующее:
КомандаОписание
Send("{TAB}")Перейти к следующему элементу управления (кнопка, checkbox и т.д.)
Send("+{TAB}")Перейти к предыдущему элементу управления.
Send("^{TAB}")Перейти к следующей вкладке (на вкладках диалогового окна)
Send("^+{TAB}")Перейти к предыдущей вкладке.
Send("{SPACE}")Можно использовать для переключения флажка или нажатия кнопки.
Send("{+}")Устанавливает галочку (Если это настоящий checkbox.)
Send("{-}")Снимает галочку.
Send("{NumPadMult}")Раскрывает дерево папки SysTreeView32.

Используйте комбинацию Alt+клавиша для доступа к пунктам меню. Также, откройте Блокнот и выполните следующее:

КомандаОписание
Send("!f")Эмулирует Alt+f, для доступа к меню Блокнота (Alt+ф в русской локализации). Попробуйте другие клавиши! (При нажатии Alt эти буквы становятся подчёркнутыми).
Send("{DOWN}")Перемещение вниз по меню.
Send("{UP}")Перемещение вверх по меню.
Send("{LEFT}")Перемещение влево к новому меню или раскрыть подменю.
Send("{RIGHT}")Перемещение вправо к новому меню или свернуть подменю.
Смотрите справку Windows, нажав Win+F1 для просмотра полного списка горячих клавиш, если вы всё ещё не знаете их назначение, таких как Alt+F4, PrintScreen, Ctrl+C и т.д.

При запуске скрипта на удаленном компьютере через программу, такую как psexec (www.sysinternals.com) или beyondexec (www.beyondlogic.org) необходимо, особенно при отправке данных программе запущенной скриптом с функцией Run, использовать ControlSend или другие функции ControlXXX, чтобы непосредственно взаимодействовать с элементами управления. Эмуляция не сработает даже с Opt("SendAttachMode",1).
Использования ключа -s при передаче может позволить больше прав на удалённом компьютере.

Opt("SendKeyDelay",...) изменяет продолжительность паузы между эмулированными нажатиями клавиш.
Opt("SendKeyDownDelay",...) изменяет продолжительность нажатого состояния клавиши, перед тем как её отпустить.
Установите оба параметра "SendKeyDelay" и "SendKeyDownDelay" равным 0, чтобы полностью устранить все задержки при эмуляции нажатий. Это может потребоваться при определенных обстоятельствах, например, при блокировке системы ("#l") это может быть необходимо для устранения задержек, чтобы предохранить клавишу WIN от нажатого состояния.

См. также

SendAttachMode (Опция), SendKeepActive, SendKeyDelay (Опция), SendKeyDownDelay (Опция), ControlSend, BlockInput, HotKeySet, WinMenuSelectItem

Пример

; Эмуляция нажатия комбинации клавиш Win + R
; Send("#r")
Send("#к") ; если русский язык по умолчанию при загрузке OS, то вместо "#r" нужно "#к", либо в скрипте временно переключать на англоязычную раскладку.

; в англоязычном примере окно называется Run
$hWnd = WinWait("Запуск программы", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
Sleep(100)

; Эмуляция ввода текста notepad.exe и нажатие Enter
Send("notepad.exe{Enter}")

; Ожидание 5 секунд до появление окна блокнота
$hWnd = WinWait("[CLASS:Notepad]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

Send("Сегодняшняя дата и время {F5}")

Sleep(1000)

; Закрывает блокнот.
WinClose($hWnd)

; При закрытии появится окно с предложением сохранить файл, classname вызываемого окна "#32770", эмулируем нажатие "TAB" для перемещения фокуса на вторую кнопку и "ENTER", чтобы отказаться от сохранения.
WinWaitActive("[CLASS:#32770]")
Sleep(500)
Send("{TAB}{ENTER}")