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


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 на цифровой клавиатуре)

exect=Send('{ASC~~065}')


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

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

exect=Send('{ASC~~2709}')
exect=Send('{ASC~~0xA95}')



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

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


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

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

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


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

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


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

exect=$var_i=4||Send('+{TAB~~'&$var_i&'}')


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

exect=$var_s=Chr(65)||Send('{'&$var_i&'~~4}')


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

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

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

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

КомандаОписание
exect=Send('!f')Эмулирует Alt+f, для доступа к меню Блокнота (Alt+ф в русской локализации).
Попробуйте другие клавиши! (При нажатии Alt эти буквы становятся подчёркнутыми).
exect=Send('{DOWN}')Перемещение вниз по меню.
exect=Send('{UP}')Перемещение вверх по меню.
exect=Send('{LEFT}')Перемещение влево к новому меню или раскрыть подменю.
exect=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 от нажатого состояния.

Функцию можно подключить через команду exect

См. также

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

Примеры:
 Как создать кнопку?


exect=$var_i=4||Send('+{TAB~~'&$var_i&'}') ;; нажать TAB 4 раза

exect=Send('{TAB}') ;; нажать TAB

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]',Null,5)||SendKeepActive(HWnd($var_h)) <FOR> 1 <TO> 10 exect=Send('привет')||Sleep(500) <NEXT> exect=SendKeepActive(Null)||WinClose(HWnd($var_h)) ;; запустить "Блокнот" и удерживать окно блокнота активным при использовании функции Send()

<TRAY=~~CTRL+Q||1||TCIMG.dll,112> <PRESS=11,51> exect=MouseClick('right')||Sleep(300)||Send('SS{ENTER~~2}') <PRESS=1B> :EXIT: ;; по нажатию CTRL+Q в активном окне нажать ПКМ + 2 раза клавишу "S" + 2 раза "ENTER" (применяется для вызова настроенного контекстного меню FireFox для быстрого сохранения изображений)


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru