Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.
Группа Вконтакте | Электронная почта | Симаков Яков ВК |
Посылает нажатия клавиш в окно или его контрол (элемент управления).
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 | Окна, чей текст включает значение этого параметра, исключаются. |
Нуль, если команда выполнена успешно. Иначе 1.
Команда ControlSendRaw передаёт строку, заданную в параметре Keys, буквально, т.е. она не будет интерпретировать {Enter} как нажатие клавиши Enter или ^c как комбинацию Control-C.
Если параметр Control опущен, эта команда пытается посылать клавиши верхнему контролу указанного окна (что часто оказывается правильным) или самому окну, если в нём нет контролов.
По умолчанию, модификаторы (Ctrl, Alt, Shift, Win) посылаются так же, как это делает команда Send. Это позволяет окну командной строки и другим консольным окнам правильно распознавать буквы в верхнем регистре, управляющие символы и т.п.
Однако в некоторых случаях посылаемые модификаторы могут нежелательным образом влиять на активное в этот момент окно, особенно если пользователь активно что-то печатает во время выполнения команды ControlSend или если посылается клавиша Alt (т.к. Alt активирует строку меню активного окна). Этого можно избежать путём раздельной посылки нажатий и отпусканий модификатора, как в следующем примере:
Метод, описанный выше, также позволяет посылать нажатия модификаторов (Ctrl/Alt/Shift/Win) в то время, когда компьютер заблокирован (на экране отображается приглашение к регистрации).
Необходимо избегать применения команды BlockInput, если ControlSend используется применительно к консольному окну, такому, как окно командного интерпретатора. Поскольку это может помешать правильному восприятию букв в верхнем регистре и модификаторов, таких как Ctrl.
Команда SetKeyDelay задаёт скорость посылки клавиш. Если окно ненадёжно получает посылаемые нажатия клавиш, попробуйте увеличить длительность нажатия через второй параметр SetKeyDelay, как в примерах ниже:
Если целевым является контрол Edit (текстовое поле) или подобный ему, указанные ниже методы работают надёжнее и быстрее, чем ControlSend:
ControlSend, как правило, не может работать со строкой меню окна. Чтобы обойти это ограничение, используйте команду WinMenuSelectItem. Если это невозможно по причине особенностей реализации строки меню, вы можете попытаться определить сообщение, соответствующее нужному вам пункту меню, следуя методам, описанным в статье "Отправка сообщений окну или его элементам управления".
Заголовки и текст окон чувствительны к регистру. Скрытые окна не определяются, если это не задано командой DetectHiddenWindows.