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

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

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

Оригинал статьи в AutoHotkey.chm: "ControlSend / ControlSendRaw", в содержании - "Window Management" - "Controls" - "ControlSend / ControlSendRaw", v1.0.46.03.

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

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

ControlSend / ControlSendRaw

Посылает нажатия клавиш в окно или его контрол (элемент управления).

ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]
ControlSendRaw [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]

Параметры

Control Может задаваться как ClassNN (имя класса и номер данного экземпляра) или как имя/текст контрола. Все эти значения можно определить, используя программу Window Spy. При использовании имени/текста метод их поиска можно задавать командой SetTitleMatchMode. Если параметр опущен или пустой, используется верхний контрол окна. Если параметр задать как ahk_parent, нажатия клавиш будут посланы напрямую родительскому окну контрола.

Чтобы указать контрол через его HWND (window handle, идентификатор окна), оставьте параметр Control пустым и задайте ahk_id %ControlHwnd% как значение параметра WinTitle - это работает также и для скрытых контролов, даже если обнаружение скрытых окон (команда DetectHiddenWindows) не включено. HWND, как правило, узнаётся через команды ControlGet Hwnd, MouseGetPos или DllCall.
Keys Последовательность посылаемых клавиш (подробности см. в описании команды Send). Чтобы послать запятую, отметьте её escape-символом (`,). Скорость посылки клавиш можно менять командой SetKeyDelay.

В отличие от команды Send, ControlSend не может посылать щелчки мыши; используйте для этой цели команду ControlClick.
WinTitle Заголовок или часть заголовка окна (параметры поиска можно задавать командой SetTitleMatchMode). Если этот и следующие 3 параметра опущены, будет использовано последнее найденное окно. Если параметр задан буквой А и следующие 3 параметра опущены, будет использовано активное окно. Чтобы задать окно через его класс, используйте конструкцию ahk_class ТочноеИмяКласса (можно посмотреть программой Window Spy). Чтобы использовать идентификатор процесса (PID), задайте параметр как ahk_pid %ПеременнаяСодержащаяPID%. Чтобы использовать группу окон, задайте параметр как ahk_group ИмяГруппы. Чтобы использовать идентификатор окна, задайте параметр как ahk_id %ПеременнаяСодержащаяID%. Сектор поиска можно сузить, задав несколько критериев, например, My File.txt ahk_class Notepad.
WinText Подстрока из одиночного текстового элемента окна (можно посмотреть программой Window Spy). Скрытые текстовые элементы определяются, если включено определение скрытого текста (команда DetectHiddenText).
ExcludeTitle Окна, чей заголовок включает значение этого параметра, исключаются.
ExcludeText Окна, чей текст включает значение этого параметра, исключаются.

ErrorLevel

Нуль, если команда выполнена успешно. Иначе 1.

Примечания

Команда ControlSendRaw передаёт строку, заданную в параметре Keys, буквально, т.е. она не будет интерпретировать {Enter} как нажатие клавиши Enter или ^c как комбинацию Control-C.

Если параметр Control опущен, эта команда пытается посылать клавиши верхнему контролу указанного окна (что часто оказывается правильным) или самому окну, если в нём нет контролов.

По умолчанию, модификаторы (Ctrl, Alt, Shift, Win) посылаются так же, как это делает команда Send. Это позволяет окну командной строки и другим консольным окнам правильно распознавать буквы в верхнем регистре, управляющие символы и т.п.

Однако в некоторых случаях посылаемые модификаторы могут нежелательным образом влиять на активное в этот момент окно, особенно если пользователь активно что-то печатает во время выполнения команды ControlSend или если посылается клавиша Alt (т.к. Alt активирует строку меню активного окна). Этого можно избежать путём раздельной посылки нажатий и отпусканий модификатора, как в следующем примере:

ControlSend, Edit1, {Alt down}ф{Alt up}, Безымянный - Блокнот

Метод, описанный выше, также позволяет посылать нажатия модификаторов (Ctrl/Alt/Shift/Win) в то время, когда компьютер заблокирован (на экране отображается приглашение к регистрации).

Необходимо избегать применения команды BlockInput, если ControlSend используется применительно к консольному окну, такому, как окно командного интерпретатора. Поскольку это может помешать правильному восприятию букв в верхнем регистре и модификаторов, таких как Ctrl.

Команда SetKeyDelay задаёт скорость посылки клавиш. Если окно ненадёжно получает посылаемые нажатия клавиш, попробуйте увеличить длительность нажатия через второй параметр SetKeyDelay, как в примерах ниже:

SetKeyDelay, 10, 10
SetKeyDelay, 0, 10
SetKeyDelay, -1, 0

Если целевым является контрол Edit (текстовое поле) или подобный ему, указанные ниже методы работают надёжнее и быстрее, чем ControlSend:

Control, EditPaste, Этот текст будет вставлен в место`, где курсор., ControlName, WinTitle
; Обратите внимание, что запятая после слова "место" отмечена escape-символом (`), чтобы
; она воспринималась как текстовый знак, а не как разделитель параметров команды.

ControlSetText, ControlName, Текст контрола будет заменён на этот текст., WinTitle

ControlSend, как правило, не может работать со строкой меню окна. Чтобы обойти это ограничение, используйте команду WinMenuSelectItem. Если это невозможно по причине особенностей реализации строки меню, вы можете попытаться определить сообщение, соответствующее нужному вам пункту меню, следуя методам, описанным в статье "Отправка сообщений окну или его элементам управления".

Заголовки и текст окон чувствительны к регистру. Скрытые окна не определяются, если это не задано командой DetectHiddenWindows.

Примеры

; Эта строка появится в окне Блокнота (если переключить его на английский язык ввода).
; При посылке русского текста приходится переключать на русский.
ControlSend, Edit1, This is a line of text in the notepad window., Безымянный

; Послать напрямую в окно командной строки. Опять же всё нормально, если окно переключено
; на английский, иначе появляются русские буквы.
SetTitleMatchMode, 2
ControlSend, , abc, Командная строка

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

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