- Получение общего списка свойств терминала и программы
- Номер сборки терминала
- Тип и лицензия программы
- Режимы работы терминала и программы
- Разрешения
- Проверка сетевых подключений
- Вычислительные ресурсы: память, диск, процессор
- Характеристики экрана
- Строковые свойства терминала и программы
- Настраиваемые свойства: лимит баров и язык интерфейса
- Привязка программы к свойствам среды исполнения
- Проверка состояния клавиатуры
- Проверка статуса и причины остановки MQL-программы
- Программное закрытие терминала и код возврата
- Обработка ошибок времени исполнения программы
- Пользовательские ошибки
- Управление отладкой
- Предопределенные переменные
- Предопределенные константы языка MQL5
Проверка состояния клавиатуры
Функция TerminalInfoInteger позволяет узнать состояние управляющих клавиш, называемых также виртуальными. К их числу относятся, в частности, Ctrl, Alt, Shift, Enter, Ins, Del, Esc, стрелки для движения курсора и так далее. Виртуальными они называются потому, что на клавиатурах, как правило, имеется несколько способов сгенерировать одно и то же управляющее действие. Например, Ctrl, Shift, Alt дублируются слева и справа от пробела, а движение курсором может выполняться как выделенными клавишами, так и основными при нажатии Fn. Таким образом, различить способы управления на физическом уровне (например, левый Shift от правого) с помощью данной функции нельзя.
В API определены константы для следующих клавиш.
Идентификатор |
Описание |
---|---|
TERMINAL_KEYSTATE_LEFT |
Стрелка влево |
TERMINAL_KEYSTATE_UP |
Стрелка вверх |
TERMINAL_KEYSTATE_RIGHT |
Стрелка вправо |
TERMINAL_KEYSTATE_DOWN |
Стрелка вниз |
TERMINAL_KEYSTATE_SHIFT |
Shift |
TERMINAL_KEYSTATE_CONTROL |
Ctrl |
TERMINAL_KEYSTATE_MENU |
Windows |
TERMINAL_KEYSTATE_CAPSLOCK |
CapsLock |
TERMINAL_KEYSTATE_NUMLOCK |
NumLock |
TERMINAL_KEYSTATE_SCRLOCK |
ScrollLock |
TERMINAL_KEYSTATE_ENTER |
Enter |
TERMINAL_KEYSTATE_INSERT |
Insert |
TERMINAL_KEYSTATE_DELETE |
Delete |
TERMINAL_KEYSTATE_HOME |
Home |
TERMINAL_KEYSTATE_END |
End |
TERMINAL_KEYSTATE_TAB |
Tab |
TERMINAL_KEYSTATE_PAGEUP |
PageUp |
TERMINAL_KEYSTATE_PAGEDOWN |
PageDown |
TERMINAL_KEYSTATE_ESCAPE |
Escape |
Функция возвращает двухбайтовое целочисленное значение, в котором с помощью пары битов сообщается текущее состояние запрошенной клавиши.
Младший бит позволяет отслеживать нажатия клавиши с момента предыдущего вызова функции. Например, если TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) вернула в какой-то момент 0, затем пользователь нажал Escape, то при следующем вызове TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) вернет 1. Если клавиша будет нажата еще раз, то значение снова станет равно 0. И так далее.
Для клавиш, отвечающих за переключение режимов ввода, таких как CapsLock, NumLock, ScrollLock, положение бита указывает, включен ли или выключен соответствующий режим.
Старший бит второго байта (0x8000) взводится в том случае, если клавиша нажата (и не отпущена) в текущий момент.
Данная функция не может использоваться для отслеживания нажатий буквенно-цифровых и функциональных клавиш. Для этой цели необходимо реализовать в программе обработчик OnChartEvent и перехватывать сообщения с кодом CHARTEVENT_KEYDOWN. Обратите внимание, что события генерируются на графике и доступны только для экспертов и индикаторов. Программы других типов (скрипты и сервисы) не поддерживают событийную модель программирования.
В скрипте EnvKeys.mq5 организован цикл по всем константам TERMINAL_KEYSTATE.
void OnStart()
|
Вы можете поэкспериментировать с нажатиями клавиш и включением/отключением режимов клавиатуры, и понаблюдать за тем, как меняются значения в журнале.
Например, если капитализация по умолчанию отключена, увидим строку:
TERMINAL_KEYSTATE_SCRLOCK= 0 |
Если нажать клавишу ScrollLock и, не отпуская, запустить скрипт еще раз, получим запись:
TERMINAL_KEYSTATE_CAPSLOCK=8001 |
То есть режим уже включен, а клавиша нажата. Отпустим клавишу, и в следующий раз скрипт выдаст:
TERMINAL_KEYSTATE_SCRLOCK= 1 |
Режим остался включенным, но клавиша отпущена.
TerminalInfoInteger не подходит для проверки статуса клавиш (TERMINAL_KEYSTATE_XYZ) в зависимых индикаторах созданных вызовом iCustom или IndicatorCreate — в них функция всегда возвращает 0, даже если индикатор был добавлен на график с помощью ChartIndicatorAdd.
Также функция не работает в те моменты, когда график MQL-программы не является активным (то есть пользователь переключился на другой). MQL5 не предоставляет средств для постоянного контроля за клавиатурой.