- Obtener una lista general de las propiedades del terminal y del programa
- Número de versión del terminal
- Tipo de programa y licencia
- Modos de funcionamiento del terminal y del programa
- Permisos
- Comprobación de las conexiones de red
- Recursos informáticos: memoria, disco y CPU
- Especificaciones de la pantalla
- Propiedades del terminal y de la cadena de programa
- Propiedades personalizadas: límite de barras e idioma de la interfaz
- Vincular un programa a propiedades en tiempo de ejecución
- Comprobar el estado del teclado
- Comprobar el estado del programa MQL y motivo de finalización
- Cierre programático del terminal y establecimiento de un código de retorno
- Tratamiento de errores en tiempo de ejecución
- Errores definidos por el usuario
- Gestión de depuración
- Variables predefinidas
- Constantes predefinidas del lenguaje MQL5
Comprobar el estado del teclado
La función TerminalInfoInteger permite conocer el estado de las teclas de control, también llamadas virtuales. Se trata, en concreto, de Ctrl, Alt, Shift, Enter, Ins, Del, Esc, flechas, etc. Se llaman virtuales porque los teclados, por regla general, ofrecen varias formas de generar la misma acción de control. Por ejemplo, Ctrl, Shift y Alt se duplican a la izquierda y a la derecha de la barra espaciadora, mientras que el cursor puede desplazarse tanto por las teclas dedicadas como por las principales cuando se pulsa Fn. Por lo tanto, esta función no puede distinguir entre métodos de control a nivel físico (por ejemplo, Shift izquierdo y derecho).
La API define constantes para las siguientes claves:
Identificador |
Descripción |
---|---|
TERMINAL_KEYSTATE_LEFT |
Flecha izquierda |
TERMINAL_KEYSTATE_UP |
Flecha arriba |
TERMINAL_KEYSTATE_RIGHT |
Flecha derecha |
TERMINAL_KEYSTATE_DOWN |
Flecha abajo |
TERMINAL_KEYSTATE_SHIFT |
Mayús |
TERMINAL_KEYSTATE_CONTROL |
Ctrl |
TERMINAL_KEYSTATE_MENU |
Windows |
TERMINAL_KEYSTATE_CAPSLOCK |
BloqMayús |
TERMINAL_KEYSTATE_NUMLOCK |
BloqNum |
TERMINAL_KEYSTATE_SCRLOCK |
BloqDespl |
TERMINAL_KEYSTATE_ENTER |
Intro |
TERMINAL_KEYSTATE_INSERT |
Insert |
TERMINAL_KEYSTATE_DELETE |
Supr |
TERMINAL_KEYSTATE_HOME |
Inicio |
TERMINAL_KEYSTATE_END |
Fin |
TERMINAL_KEYSTATE_TAB |
Tab |
TERMINAL_KEYSTATE_PAGEUP |
Repág |
TERMINAL_KEYSTATE_PAGEDOWN |
Avpág |
TERMINAL_KEYSTATE_ESCAPE |
Esc |
La función devuelve un valor entero de dos bytes que informa del estado actual de la clave solicitada mediante un par de bits.
El bit menos significativo lleva la cuenta de las pulsaciones desde la última llamada a una función. Por ejemplo, si TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) devolvió 0 en algún momento, y luego el usuario pulsó Escape, entonces en la siguiente llamada, TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) devolverá 1. Si se vuelve a pulsar la tecla, el valor volverá a ser 0.
Para las teclas encargadas de conmutar los modos de entrada, como CapsLock, NumLock y crollLock, la posición del bit indica si el modo correspondiente está activado o desactivado.
El bit más significativo del segundo byte (0x8000) se activa si la tecla está pulsada (y no soltada) en ese momento.
Esta función no puede utilizarse para realizar un seguimiento de la pulsación de teclas alfanuméricas y funcionales. Para ello, es necesario aplicar el manejador OnChartEvent e interceptar los mensajes con el código CHARTEVENT_KEYDOWN en el programa. Tenga en cuenta que los eventos se generan en el gráfico y sólo están disponibles para los Asesores Expertos y los indicadores. Los programas de otros tipos (scripts y servicios) no admiten el modelo de programación de eventos.
El script EnvKeys.mq5 incluye un bucle a través de todas las constantes TERMINAL_KEYSTATE.
void OnStart()
|
Puede experimentar con las pulsaciones y activar o desactivar los modos de teclado para ver cómo cambian los valores en el registro.
Por ejemplo, si las mayúsculas están desactivadas por defecto, veremos el siguiente registro:
TERMINAL_KEYSTATE_SCRLOCK= 0 |
Si pulsamos la tecla ScrollLock y, sin soltarla, volvemos a ejecutar el script, obtenemos el siguiente registro:
TERMINAL_KEYSTATE_CAPSLOCK=8001 |
Es decir, el modo ya está activado y la tecla, pulsada. Vamos a soltar la tecla, y la próxima vez el script volverá:
TERMINAL_KEYSTATE_SCRLOCK= 1 |
El modo ha permanecido activado, pero la tecla se soltó.
TerminalInfoInteger no es adecuado para comprobar el estado de las teclas (TERMINAL_KEYSTATE_XYZ) en los indicadores dependientes creados por la llamada iCustom o IndicatorCreate. En ellos, la función siempre devuelve 0, incluso si el indicador se añadió al gráfico utilizando ChartIndicatorAdd.
Además, la función no funciona cuando el gráfico del programa MQL no está activo (el usuario ha cambiado a otro). MQL5 no proporciona medios para el control permanente del teclado.