Синтаксис отправки клавиш#
Начните с сочетания клавиш#
В Послать клавиши вставьте ^c, чтобы послать Ctrl+C в Windows, или #c, чтобы послать Command+C на Mac. Можно также нажать Запись, нажать сочетание и нажать Готово. Lua использует тот же синтаксис через ms.keys(sequence).
Обычные символы означают клавиши в позициях американской клавиатуры. abc нажимает A, B, C подряд; прописные ABC не добавляют Shift. Используйте +a для Shift+A. Для Юникода или фиксированного текста см. текст и экранирование и рецепты буфера обмена.
Модификаторы и группы#
| Префикс | Windows | Mac |
|---|---|---|
^ | Ctrl | Control ⌃ |
% | Alt | Option ⌥ |
+ | Shift | Shift ⇧ |
# | Win | Command ⌘ |
Префикс применяется к следующей клавише или группе в скобках. ^+t посылает Ctrl+Shift+T. ^(ac) применяет Ctrl и к A, и к C. ^ac применяет Ctrl только к A. Группы можно вкладывать; используйте парные скобки. Модификаторы группы присоединяются к каждому нажатию клавиши, поэтому не рассчитывайте, что модификатор непрерывно удерживается между клавишами. Голый завершающий модификатор — не нажатие клавиши: используйте, например, {CTRL}, когда нужна сама клавиша-модификатор.
Lua ms.is_keys_pressed проверяет объединение всех клавиш и модификаторов на момент запроса на обеих платформах: ^ac требует, чтобы Control, A и C были нажаты вместе. Любая сторона удовлетворяет префиксу; явные имена {LCTRL} / {RCTRL} сохраняют сторону. Повторы игнорируются; шаги ожидания, текста, мыши или колеса возвращают false. Последовательность прошлых нажатий не распознаётся.
Именованные клавиши, повторы и задержки#
Используйте {ENTER} для Enter. Имена не зависят от регистра. {LEFT 3} нажимает Left три раза. Положительное число повторяет клавишу; ноль или отрицательное число сводится к одному. {SLEEP 100} ждёт 100 мс; требуется неотрицательное целое. Отделяйте имя и его аргумент пробелом.
Пример: ^c{SLEEP 100}^v копирует, коротко ждёт, затем вставляет в Windows. Эквивалент Mac — #c{SLEEP 100}#v.
Таблица ниже перечисляет имена, принимаемые разборщиком, включая псевдонимы и все нумерованные имена F/цифрового блока. Один символ ASCII, цифра или поддерживаемый знак пунктуации американской клавиатуры также может стоять в фигурных скобках, например {a} или {+}.
| Имена | Значение |
|---|---|
{ENTER}, {RETURN} | Enter |
{ESC} | Escape |
{TAB} | Tab |
{BACKSPACE} | Backspace |
{SPACE} | Пробел |
{CAPSLOCK} | Caps Lock |
{INSERT}, {INS} | Insert (только Windows) |
{DELETE}, {DEL} | Delete / прямое удаление |
{HOME}, {END} | Home / End |
{PGUP}, {PGDN} | Page Up / Page Down |
{UP}, {DOWN}, {LEFT}, {RIGHT} | Клавиши со стрелками |
{PRTSC} | Print Screen (только Windows) |
{BREAK} | Break (только Windows) |
{MEDIA_NEXT}, {MEDIA_PREV}, {MEDIA_STOP}, {MEDIA_PLAY}, {MEDIA_PLAY_PAUSE} | Медиаклавиши (только Windows в последовательностях клавиш) |
{VOLUME_MUTE}, {VOLUME_DOWN}, {VOLUME_UP} | Клавиши громкости (только Windows в последовательностях клавиш) |
{CTRL}, {ALT}, {SHIFT} | Control / Alt (на Mac Option) / Shift |
{LCTRL}, {RCTRL}, {LSHIFT}, {RSHIFT}, {LALT}, {RALT} | Левые/правые клавиши-модификаторы; Alt на Mac — Option |
{LWIN}, {WIN}, {RWIN} | Клавиша Windows; на Mac Command |
{F1}, {F2}, {F3}, {F4}, {F5}, {F6}, {F7}, {F8}, {F9}, {F10}, {F11}, {F12}, {F13}, {F14}, {F15}, {F16}, {F17}, {F18}, {F19}, {F20}, {F21}, {F22}, {F23}, {F24} | Функциональные клавиши; Mac поддерживает F1–F20 |
{N0}, {N1}, {N2}, {N3}, {N4}, {N5}, {N6}, {N7}, {N8}, {N9} | Цифры цифрового блока 0–9 |
{MOUSE_LEFT}, {MOUSE_RIGHT}, {MOUSE_MIDDLE}, {MOUSE_X1}, {MOUSE_X2} | Щелчки мыши (только Windows) |
{MOUSE_WHEEL}, {MOUSE_HWHEEL} | Колесо: напр. {MOUSE_WHEEL 120}, {MOUSE_HWHEEL -120} (только Windows) |
{SLEEP} | Задержка: напр. {SLEEP 100}, миллисекунды |
Кнопки мыши и колесо#
Windows поддерживает {MOUSE_LEFT}, {MOUSE_RIGHT}, {MOUSE_MIDDLE}, {MOUSE_X1} и {MOUSE_X2} как щелчки. {MOUSE_LEFT 2} посылает два щелчка; указатель при этом не перемещается.
{MOUSE_WHEEL 120} прокручивает на одну зарубку вверх; -120 прокручивает вниз. {MOUSE_HWHEEL 120} прокручивает вправо; -120 влево. Аргумент — знаковое приращение колеса, а не число повторов. Это соглашение внедряемого ввода; оно отличается от знака, используемого записанными шагами колеса жеста.
Mac разбирает эти лексемы, но пропускает действия мыши и колеса при выполнении ввода. Их нельзя использовать, чтобы синтезировать щелчки или прокрутку Mac через ms.keys.
Текст и экранирование#
Текстовый режим доступен только с Lua ms.keys(s, true); редактор «Послать клавиши» всегда использует режим клавиш. Обычные символы становятся текстом Юникода, но ^, %, +, #, скобки и открывающая фигурная скобка по-прежнему начинают синтаксис. Одиночные символы в фигурных скобках остаются нажатиями клавиш и в текстовом режиме.
Для сочетаний внутри текстового режима заключите клавишу в скобки: ^{c} посылает Ctrl+C, а #{c} посылает Command+C. Незаключённое ^c в этом режиме выдаёт текст c и отбрасывает модификатор. Можно также сделать отдельный вызов ms.keys("^c") в обычном режиме клавиш.
| Литеральный символ | Запись в последовательности |
|---|---|
^ | {^} |
% | {%} |
+ | {+} |
# | {#} |
( | {(} |
) | {)} |
{ | {{} |
} | } (без скобок) |
Обратная косая черта не является экранированием последовательности клавиш. В Lua-строке в кавычках пишите "\\" для одной обратной косой или используйте длинные скобки. Для произвольного текста с символами синтаксиса метод буфера обмена избегает обоих уровней экранирования.
Частые сочетания клавиш#
Они зависят от настроек сочетаний целевого приложения и операционной системы.
| Назначение | Последовательность Windows | Последовательность Mac |
|---|---|---|
| Копировать | ^c | #c |
| Вставить | ^v | #v |
| Вырезать | ^x | #x |
| Выделить всё | ^a | #a |
| Отменить | ^z | #z |
| Новая вкладка | ^t | #t |
| Закрыть вкладку | ^w | #w |
| Вернуть закрытую вкладку | ^+t | #+t |
| Следующая вкладка | ^{TAB} | ^{TAB} |
| Предыдущая вкладка | ^+{TAB} | ^+{TAB} |
| Сменить программу | %{TAB} | #{TAB} |
| Предыдущий/следующий рабочий стол | #^{LEFT} / #^{RIGHT} | ^{LEFT} / ^{RIGHT} |
| Снимок области экрана | #+s | #+4 |
| Показать рабочий стол | #d | {F11} |
| Диспетчер задач / Activity Monitor | ^+{ESC} | Используйте «Открыть программу»: com.apple.ActivityMonitor |
| Заблокировать экран | #l | ^#q |
Почему нельзя отправить Ctrl+Alt+Del#
Ctrl+Alt+Del — это Secure Attention Sequence Windows. Windows игнорирует обычный синтетический ввод для этой последовательности, поэтому ^%{DEL} не может открыть этот экран безопасности. Используйте ^+{ESC} для диспетчера задач, #l для блокировки или действие Выполнить команду с shutdown /l, чтобы выйти из системы (это завершает сеанс).
Ограничения и особенности платформ#
Общий разборщик не имеет общего ограничения длины строки или числа повторов. Числа повторов и задержки хранятся как беззнаковые 32-битные значения; приращения колеса — как знаковые 32-битные. Значения вне диапазона могут обернуться при преобразовании, поэтому используйте небольшие практичные числа и задержки. Неверное имя клавиши или отсутствующий обязательный аргумент даёт ошибку разбора; редактор проверяет во время ввода.
Windows выполняет последовательности в рабочих потоках и ждёт {SLEEP ms}. Mac посылает ввод пакетами по таймеру. Строки действий Mac длиннее 16 384 байт отклоняются; для уже разобранного ввода Lua пределы — 16 384 действия и 16 384 байта на текстовое действие. Очередь ожидания вмещает до 64 записей; лишний ввод отбрасывается и записывается в журнал.
На Mac доступны F1–F20, цифры цифрового блока и сопоставленные клавиши навигации. Insert/INS, PRTSC, BREAK, F21–F24, лексемы медиа/громкости и лексемы мыши/колеса не поддерживаются и пропускаются. Для медиа и громкости используйте Медиа и система. ms.keys_down и ms.keys_up есть только в Windows; см. Lua API.