Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "Input", в содержании - "Keyboard Control" - "Input", v1.0.47.05.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

Input

Ждёт, пока пользователь напечатает строку (не поддерживается в Windows 9x: не делает там ничего).

Input [, OutputVar, Options, EndKeys, MatchList]

Параметры

OutputVar Имя переменной, в которой будет сохранён введённый пользователем текст (по умолчанию захватывается также искусственный ввод).

Если этот и другие параметры опущены, любая команда Input, выполняемая в этот момент в другом потоке, завершается, и в её переменную ErrorLevel пишется слово NewInput. В отличие от этого, ErrorLevel текущей команды Input устанавливается в 0, если она прервала работу предыдущей команды Input, или в 1, если прерывать было нечего.

В OutputVar не помещаются нажатия клавиш как таковые. Вместо этого там сохраняются символы, соответствующие этим нажатиям в раскладке клавиатуры (языке) активного окна. Вследствие этого, нажатия клавиш, не производящие символов (такие как PageUp и Escape), не сохраняются (хотя они могут распознаваться через параметр EndKeys, описанный ниже).

Пробельные символы, такие как TAB (`t), сохраняются буквально. ENTER сохраняется как перевод строки (`n).
Options Может быть пустым или содержать какие-то из следующих букв (в любом порядке, с пробелами или без):

B: Backspace игнорируется. По умолчанию нажатие Backspace удаляет последний введённый символ с конца строки. Замечание: если вводимый текст видим (например, в редакторе) и были использованы клавиши-стрелки или другое средство для перемещения по тексту, Backspace всё равно удалит последний символ текста, а не тот, что позади каретки (текстового курсора).

C: Чувствительность к регистру. По умолчанию MatchList нечувствителен к регистру (в версиях до 1.0.43.03 только буквы A-Z распознаются как имеющие разные регистры, но не такие буквы, как ű/Ű).

I: Игнорировать ввод, генерируемый скриптами AutoHotkey - такой, как через команду SendEvent. Однако ввод через команды SendInput и SendPlay игнорируется всегда, независимо от данной настройки.

L: Ограничение длины (например, L5). Максимальная разрешённая длина вводимой строки. Когда текст достигнет указанной длины, команда Input завершится и в ErrorLevel будет записано слово Max, если только при этом текст не совпадёт ни с одной из строк, перечисленных в MatchList. В последнем случае в ErrorLevel помещается слово Match. Если данный параметр не задан, ограничение по длине составляет 16383 символов, что также является абсолютным максимумом.

M: Нажатия с модификаторами, такие как Control-A и далее, до Control-Z, распознаются и транскрибируются, если они соответствуют реальным символам из набора ASCII. Вот пример, который распознаёт Control-C:

Transform, CtrlC, Chr, 3 ; Сохранить символ, соответствующий Ctrl-C, в переменную CtrlC.
Input, OutputVar, L1 M
if OutputVar = %CtrlC%
    MsgBox, Вы нажали Control-C.
ExitApp
Замечание: символы, посылаемые комбинациями от Ctrl-A до Ctrl-Z, лежат в диапазоне от Chr(1) до Chr(26). Опция M может также вызвать отклонения от нормы в работе таких горячих клавиш, как Ctrl-ЛеваяСтрелка в то время, когда выполняется команда Input.

T: Таймаут (например, T3). Через указанное число секунд команда Input завершится, и в ErrorLevel запишется слово Timeout. Если Input завершается по таймауту, в OutputVar будет текст, который пользователь успел ввести. Можно задавать числом с плавающей точкой, например, 2.5.

V: Видимость текста. По умолчанию ввод пользователя блокируется (прячется от системы). Используйте эту опцию, если хотите, чтобы ввод посылался в активное окно.

*: Искать везде. По умолчанию весь текст, который напечатает пользователь, должен точно совпасть с одной из строк в MatchList. Задайте эту опцию, если хотите, чтобы отслеживались совпадения части вводимого текста.
EndKeys Может быть пустым или содержать список клавиш, при нажатии на любую из которых работа Input должна быть завершена (сами эти клавиши не попадут в OutputVar). Когда Input завершается таким образом, в ErrorLevel помещается слово EndKey, затем двоеточие и имя завершающей клавиши. Примеры:
EndKey:.
EndKey:Escape
В списке EndKey используется тот же формат, что и для команды Send. Например, при указании {Enter}.{Esc} Input будет завершаться по нажатию клавиш ENTER, точка (.) или ESCAPE. Чтобы сами фигурные скобки завершали Input, их нужно задать как {{} и/или {}}.

Чтобы использовать Control, Alt или Shift в качестве завершающих, указывайте конкретно левую и/или правую клавишу из пары. Например, {LControl}{RControl}, но не {Control}.

Хотя комбинации с модификаторами, вроде Control-C (^c), не поддерживаются, но с версии v1.0.14 поддерживаются в качестве завершающих знаки, требующие удержания клавиши Shift, а именно символы пунктуации, такие как ?!:@&{}. Указание кода виртуальной клавиши, наподобие {vkFF}, также допустимо. Это полезно в тех редких случаях, когда клавиша не имеет имени и при нажатии не производит никакого видимого символа. Её виртуальный код может быть определён методом, описанным в конце статьи Список клавиш и кнопок мыши/джойстика.
MatchList Разделённый запятыми список ключевых строк. При совпадении вводимого текста с любой из них Input завершается, и в ErrorLevel пишется слово Match. Если не задана опция *, весь введённый текст целиком должен точно совпасть с какой-то из строк. Учтите, что если вокруг разделяющих запятых есть пробелы или табуляции, они считаются частями ключевых строк. Например, если MatchList содержит "ABC , XYZ ", совпадение случится только, если пользователь напечатает пробелы после ABC и перед XYZ.

Если ключевая строка сама содержит запятую, запятую нужно удвоить. Например, "string1,,,string2" означает две ключевых строки, причём первая содержит на конце запятую. Тогда как "single,,item" - это одна строка, содержащая запятую внутри себя.

Поскольку строки в MatchList не рассматриваются как отдельные параметры, весь MatchList может храниться в одной переменной. Фактически помещение его всего или его части в переменную неизбежно, если его длина превышает 16383, что является максимально возможной длиной строки в скрипте. Например, MatchList мог бы состоять из %List1%,%List2%,%List3%, где каждая из переменных содержит часть списка.

ErrorLevel

1 или 0 Всегда, когда Input вызывается без параметров, ErrorLevel устанавливается в 0, если она успешно завершает работу предыдущей команды Input, или в 1, если предыдущей команды нет.
NewInput Работа Input была прервана другим потоком, также вызвавшим команду Input.
Max Вводимый текст достиг максимальной разрешённой длины и при этом не совпал ни с одной из строк в MatchList.
Timeout Истёк заданный таймаут.
Match Произошло совпадение ввода с одной из строк в MatchList.
EndKey:Имя Была нажата одна из завершающих клавиш. В этом случае после двоеточия будет стоять имя завершающей клавиши, без фигурных скобок, т.е. EndKey:Enter, EndKey:Escape и т.п.

Примечания

Если эта команда используется, когда в другом потоке также уже работает команда Input, работа предыдущей будет завершена и в её ErrorLevel запишется слово NewInput. После этого (если были заданы параметры) начнёт работать новая команда Input.

Во время работы Input могут запускаться новые потоки через пункты меню или таймеры. Горячие клавиши также действуют, если ввод через команду Input видим. Если ввод скрыт, действуют только горячие клавиши, использующие клавиатурный хук.

Когда скрипт впервые вызывает команду Input, устанавливается клавиатурный хук (если он уже не был установлен). Вдобавок скрипт становится резидентным, что означает, что для его завершения придётся использовать команду ExitApp. Клавиатурный хук останется установленным до следующего использования команд Suspend или Hotkey, когда он и будет удалён, если не требуется для каких-либо горячих клавиш или строк автозамены.

Если вы используете несколько языков ввода (раскладок клавиатуры), Input использует раскладку активного окна, а не самого скрипта (независимо от того, видим ввод или скрыт). Однако в версиях до 1.0.44.03 используется раскладка скрипта.

Хотя строки автозамены не обладают гибкостью Input, они проще её в использовании.

Input не делает ничего в Windows 9x (даже не изменяет ErrorLevel и OutputVar). Чтобы определить Windows 9x, используйте встроенную переменную A_OSType.

Примеры

; Ждёт, пока пользователь не нажмёт любую клавишу. Клавиши, не производящие
; видимых символов, такие как модификаторы, функциональные и стрелки,
; перечислены в качестве завершающих, так что они также отслеживаются.

Input, SingleKey, L1,
(
{LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}
{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}
{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}
{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}
)
; Пример с горячей клавишей. Т.к. она предваряется тильдой (~),
; её собственное нажатие также будет послано в активное окно
; (за исключением Win9x). Так, если вы напечатаете [btw
; (или любую другую ключевую строку) в любом редакторе,
; скрипт автоматически выполнит заданное действие
; (например, заменит напечатанный текст на другой).

~[::
Input, UserInput, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca
if ErrorLevel = Max
{
    MsgBox, Вы ввели "%UserInput%" и достигли максимальной длины текста.
    return
}
if ErrorLevel = Timeout
{
    MsgBox, Вы ввели "%UserInput%" и после этого истёк таймаут.
    return
}
if ErrorLevel = NewInput
    return
IfInString, ErrorLevel, EndKey:
{
    MsgBox, Вы ввели "%UserInput%" и завершили ввод через %ErrorLevel%.
    return
}
; В противном случае произошло совпадение с ключевой строкой.
SetKeyDelay, -1 ; Большинство редакторов допускают максимальную скорость.
if UserInput = btw
    Send, {backspace 4}by the way
else if UserInput = otoh
    Send, {backspace 5}on the other hand
else if UserInput = fl
    Send, {backspace 3}Florida
else if UserInput = ca
    Send, {backspace 3}California
else if UserInput = ahk
    Run, www.autohotkey.com
return

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.