Send -Autohotkey
Посылает нажатия клавиш и щелчки мыши в активное окно.
Параметры
Keys | Последовательность посылаемых клавиш. Как и в других командах, запятая перед первым параметром необязательна. |
Режим Raw (как есть): Команда SendRaw посылает клавиши в точности как они указаны, т.е. не преобразует
Нормальный режим: В этом режиме нижеследующие символы интерпретируются как модификаторы (они модифицируют только идущую непосредственно за ними клавишу).
!: Посылает нажатие Alt. Например, команда Send This is text!a пошлёт «This is text» и затем комбинацию Alt+a. Замечание: в некоторых программах !A — не то же самое, что !a. Причина в том, что !A нажимает Alt+Shift+a, в то время как !a нажимает Alt+a. Если сомневаетесь, используйте нижний регистр.
+: Посылает нажатие Shift. Например, Send +abC пошлёт текст «AbC», а Send !+a пошлёт комбинацию Alt+Shift+a.
^: Посылает нажатие Control. Например, ^!a нажмёт Ctrl+Atl+a, Send ^
#: Посылает нажатие Win, т.е. Send #e нажмёт клавишу Windows и, удерживая её, нажмёт клавишу «e».
SendInput и SendPlay [с версии 1.0.43]: SendInput и SendPlay используют тот же синтаксис, что и Send, но работают, как правило, быстрее и более надёжно. Кроме того они буферизуют физические нажатия на клавиши и кнопки мыши, которые происходят во время посылки, что не позволяет нажатиям пользователя смешиваться с теми, которые посылает скрипт. С помощью команды SendMode можно сделать команду Send синонимом SendInput или SendPlay. Более детальное описание каждого из режимов смотрите в разделах SendInput и SendPlay ниже.
SendEvent [с версии 1.0.43]: SendEvent использует для посылки тот же метод, что и команда Send в версиях до 1.0.43. Скорость посылки нажатий задаётся командой SetKeyDelay. По умолчанию, Send является синонимом SendEvent, но может быть сделана синонимом SendPlay или SendInput с помощью команды SendMode.
Имена клавиш. В списке ниже перечислены имена специальных клавиш, которые можно посылать (каждое имя должно заключаться в фигурные скобки).
Имя клавиши | Результирующее нажатие |
---|---|
Функциональные клавиши. Например, | |
! | |
# | |
+ | |
^ | |
< | |
<>> | > |
ENTER на основной клавиатуре | |
ESCAPE | |
Пробел (такое обозначение нужно только для пробелов в начале или конце строки, пробелы в середине могут быть обычными) | |
TAB | |
Backspace | |
Delete | |
Insert | |
Стрелка вверх на основной клавиатуре | |
Стрелка вниз на основной клавиатуре | |
Стрелка влево на основной клавиатуре | |
Стрелка вправо на основной клавиатуре | |
Home на основной клавиатуре | |
End на основной клавиатуре | |
Page Up на основной клавиатуре | |
Page Down на основной клавиатуре | |
CapsLock (использование команды SetCapsLockState более надёжно в NT/2k/XP) | |
ScrollLock (см. также SetScrollLockState) | |
NumLock (см. также SetNumLockState) | |
CONTROL (посылается код нейтральной виртуальной клавиши и левый сканкод) | |
Левый CONTROL (то же, что CONTROL в Win9x, но в NT/2k/XP будет послан код левой виртуальной клавиши) | |
Правый CONTROL | |
Нажимает и удерживает CONTROL пока не будет послан | |
ALT (посылается код нейтральной виртуальной клавиши и левый сканкод) | |
Левый ALT (то же, что ALT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши) | |
Правый ALT (или AltGr, в зависимости от раскладки клавиатуры) | |
Нажимает и удерживает ALT пока не будет послан | |
SHIFT (посылает код нейтральной виртуальной клавиши и левый сканкод) | |
Левый SHIFT (то же, что SHIFT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши) | |
Правый SHIFT | |
Нажимает и удерживает SHIFT пока не будет послан | |
Левая клавиша Windows | |
Правая клавиша Windows | |
Нажимает и удерживает левую клавишу Windows пока не будет послан | |
Нажимает и удерживает правую клавишу Windows пока не будет послан | |
Клавиша контекстного меню | |
Клавиша SLEEP | |
Посылает комбинацию Alt с кодом символа (набираемого на цифровой клавиатуре), которая может быть использована для генерации символов, которые не существуют на клавиатуре. Чтобы сгенерировать символы ASCII, используйте коды от 1 до 255. Для символов ANSI (стандарт для большинства языков) используйте коды от 128 до 255, но добавьте в начало 0, например Для символов Unicode указывайте коды от 256 до 65535 (без нуля в начале). Однако это поддерживается не всеми приложениями. Поэтому для большей совместимости и упрощения посылки длинных строк в Unicode используйте команду Transform Unicode. | |
Посылает нажатие, которое имеет код виртуальной клавиши XX и сканкод YYY. Например: Send | Значения XX и YYY шестнадцатеричные и обычно могут быть определены через пункт меню View — Key history в главном окне скрипта (это окно открывается через пункт Open в меню значка в трее). См. также раздел «Специальные клавиши» на странице «Список клавиш и кнопок мыши/джойстика». |
Цифры на цифровой (дополнительной) клавиатуре. Например, | |
Точка на цифровой клавиатуре. | |
Enter на цифровой клавиатуре. | |
Умножение на цифровой клавиатуре. | |
Деление на цифровой клавиатуре. | |
Плюс на цифровой клавиатуре. | |
Минус на цифровой клавиатуре. | |
Delete на цифровой клавиатуре. | |
Insert на цифровой клавиатуре. | |
Clear на цифровой клавиатуре (обычно это клавиша ‘5’, когда выключен NumLock). | |
Стрелка вверх на цифровой клавиатуре. | |
Стрелка вниз на цифровой клавиатуре. | |
Стрелка влево на цифровой клавиатуре. | |
Стрелка вправо на цифровой клавиатуре. | |
Home на цифровой клавиатуре. | |
End на цифровой клавиатуре. | |
Page Up на цифровой клавиатуре. | |
Page Down на цифровой клавиатуре. | |
2000/XP/Vista+: Выбор кнопки «Назад» в браузере. | |
2000/XP/Vista+: Выбор кнопки «Вперед» в браузере. | |
2000/XP/Vista+: Выбор кнопки «Обновить» в браузере. | |
2000/XP/Vista+: Выбор кнопки «Остановить» в браузере. | |
2000/XP/Vista+: Выбор кнопки «Поиск» в браузере. | |
2000/XP/Vista+: Выбор кнопки «Избранное» в браузере. | |
2000/XP/Vista+: Запустить браузер и перейти на домашнюю страницу. | |
2000/XP/Vista+: Выключить/включить главный регулятор звука. Обычно эквивалентно команде SoundSet, +1, , mute | |
2000/XP/Vista+: Уменьшить громкость на главном регуляторе. Обычно эквивалентно SoundSet -5 | |
2000/XP/Vista+: Увеличить громкость на главном регуляторе. Обычно эквивалентно SoundSet +5 | |
2000/XP/Vista+: Выбор следующего трека в медиа-проигрывателе. | |
2000/XP/Vista+: Выбор предыдущего трека в медиа-проигрывателе. | |
2000/XP/Vista+: Остановка медиа-проигрывателя. | |
2000/XP/Vista+: Пауза/продолжение в медиа-проигрывателе. | |
2000/XP/Vista+: Запуск приложения электронной почты. | |
2000/XP/Vista+: Запуск медиа-проигрывателя. | |
2000/XP/Vista+: Запуск пользовательского приложения 1. | |
2000/XP/Vista+: Запуск пользовательского приложения 2. | |
PrintScreen | |
Ctrl+Break | |
Pause | |
[с версии 1.0.43] | Посылается щелчок мыши, при этом доступны те же опции, что и для команды Click. Например, |
Посылается событие кнопки или колеса мыши в текущей позиции указателя (изменение позиции и другие возможности смотрите в описании | |
Когда Режим Blind внутренне используется при переназначении клавиш. Например, переназначение a::b будет выдавать: 1) «b», когда вы нажмёте «a»; 2) «B» при нажатии «A» (в верхнем регистре); 3) Control-B при нажатии Control-A. | |
[с версии 1.0.43] | Посылает строку буквально как она есть, т.е. не преобразует |
Повтор или удержание клавиши
Чтобы повторить нажатие несколько раз, заключите в фигурные скобки имя клавиши и число повторов. Например:
Чтобы удерживать нажатой или отпустить клавишу, поместите в фигурные скобки её имя и слово Down (вниз) или Up (вверх). Например:
Когда клавиша удерживается вышеописанным методом, не происходит её автоповтор, как это было бы при физическом удержании (причина в том, что автоповтор является возможностью драйвера/оборудования). Однако для симуляции автоповтора можно использовать Loop. Следующий пример посылает 20 нажатий Tab:
Вместо Down также можно использовать DownTemp. Эффект будет тот же, за исключением клавиш-модификаторов (Control/Shift/Alt/Win). В последнем случае DownTemp сообщает следующим за ним посылающим командам, что модификаторы не являются постоянно нажатыми, т.е. они могут отпускаться, если это нужно. Например, если за командой Send
Общие замечания
В добавок к буквам от A до Z, также поддерживаются следующие буквы и символы (однако, если кодовая страница вашей системы отлична от 1252 [США и Западная Европа], этот список может быть иным):
BlockInput в сравнении с SendInput/SendPlay: Хотя команда BlockInput может быть использована для защиты симулируемых скриптом нажатий от прерывания физическими нажатиями, производимыми пользователем, для этой цели часто лучше использовать SendInput или SendPlay. Их преимущество в том, что они не отбрасывают то, что печатает пользователь во время посылки; его нажатия запоминаются и посылаются позже.
Если нужно послать большое количество нажатий, их можно поместить в секцию продолжения, чтобы улучшить читабельность скрипта.
Поскольку операционная система не позволяет симуляцию комбинации CTRL-ALT-DELETE, команды вроде ^!
SendInput [с версии 1.0.43]
SendInput, как правило, является предпочтительным способом посылки нажатий благодаря его высокой скорости и надёжности. В большинстве случаев SendInput работает почти мгновенно даже при посылке длинных строк. Благодаря своей скорости он более надёжен, поскольку при этом снижается вероятность того, что какое-то другое окно выскочит неожиданно на первый план и перехватит посылаемые нажатия. Надёжность повышает и тот факт, что все физические нажатия пользователя во время посылки запоминаются и посылаются позже.
В отличие от других методов, SendInput имеет ограничение со стороны операционной системы на количество посылаемых символов — не более 5000. Это число может варьироваться в зависимости от версии операционной системы и настроек производительности. Символы и события сверх этого лимита не посылаются.
Замечание: SendInput игнорирует SetKeyDelay, поскольку операционная система не поддерживает задержки для этого режима. Однако когда SendInput сбрасывается в SendEvent при условиях, описанных ниже, он использует SetKeyDelay -1, 0 (исключение: если задержки для SendEvent были установлены как «-1,-1», то используется эта настройка). Если SendInput сбрасывается в SendPlay, он использует его задержки.
Если какой-то другой скрипт (не тот, где выполняется SendInput) установил низкоуровневый хук клавиатуры, SendInput автоматически переключается в SendEvent (или в SendPlay, если действует команда SendMode InputThenPlay). Это делается потому, что присутствие внешнего хука сводит на нет все преимущества SendInput, делая его хуже как SendPlay, так и SendEvent. Однако поскольку SendInput не способен обнаруживать низкоуровневые хуки, установленные другими программами, а только AutoHotkey с версии 1.0.43, в этих случаях он не будет переключаться, что сделает его менее надёжным, чем SendPlay/Event.
Когда SendInput посылает щелчки мыши способами вроде
SendPlay [с версии 1.0.43]
Наибольшее преимущество SendPlay заключается в его способности взаимодействовать с более широким спектром игр. Например, какая-либо игра может принимать строки автозамены, только если они имеют опцию SendPlay.
Из трёх режимов посылки, SendPlay самый необычный, так как он не симулирует нажатия и щелчки как таковые. Вместо этого он создаёт последовательность событий (сообщений), которые идут напрямую активному окну (наподобие ControlSend, но на более низком уровне).
Как и у SendInput, нажатия SendPlay не смешиваются с теми, что производит пользователь. Нажатия пользователя запоминаются и посылаются позже.
Хотя SendPlay значительно медленнее SendInput, он обычно быстрее, чем традиционный SendEvent (даже с задержкой -1).
SendPlay неспособен вызывать срабатывание системных горячих клавиш, использующих клавиши Windows (LWin и RWin). Например, он не может вызвать Главное меню или открыть диалог «Выполнить» через Win-R.
Клавиши Windows (LWin и RWin) автоматически блокируются во время SendPlay, если установлен хук клавиатуры. Это предотвращает появление Главного меню, если пользователь случайно нажмёт клавишу Windows во время посылки. Другие клавиши не нуждаются в такой блокировке, поскольку операционная система буферизует их нажатия до момента окончания SendPlay.
SendPlay не использует стандартные настройки SetKeyDelay и SetMouseDelay. По умолчанию, задержки у него отсутствуют вообще. Как их можно изменить, показано в примерах ниже:
SendPlay не может включать и выключать CapsLock, NumLock и ScrollLock. Также он не может изменить состояние клавиш, которое считывается через GetKeyState, разве только нажатия посылаются в какое-либо из окон самого скрипта. Даже в этом случае изменения состояний левых и правых клавиш-модификаторов (например, RControl) могут быть считаны только через их нейтральный вариант (например, Control). SendPlay также имеет и другие ограничения, о которых рассказано в описании команды SendMode.
В отличие от SendInput и SendEvent, пользователь может прервать работу SendPlay, нажав Control-Alt-Del или Control-Escape. Когда такое происходит, оставшиеся нажатия не посылаются, но скрипт продолжает выполняться, как если бы SendPlay завершился нормально.
Хотя SendPlay может посылать события LWin и RWin, но они посылаются в активное окно и не выполняют своей обычной функции в операционной системе. Чтобы обойти это, используйте SendEvent. Например, команда SendEvent #r вызовет диалог «Выполнить».