Entradas Populares

La Elección Del Editor - 2020

MQL4: Gestión informática desde un asesor

A veces es necesario presionar programáticamente un botón en una aplicación de terceros, leer el texto de un componente específico, iniciar otro terminal, cualquier otro programa, abrir un archivo de texto, apagar la computadora en un momento determinado y realizar otras operaciones. La función WinAPI ShellExecute, que se encuentra en la biblioteca shell32.dll y la biblioteca WinUser32.mqh, nos ayudará aquí. Cómo automatizar todo este proceso: aprendemos de nuestra nueva lección sobre la programación de robots forex. El tema es inusual, ampliará enormemente tus habilidades como programador.

Para obtener más información sobre ShellExecute, consulte la Ayuda de MSDN. Allí puede obtener información detallada sobre todas las funciones disponibles en la biblioteca WinUser32.mqh. Daré una breve descripción de cada uno de ellos:

  • Shellexecute - realiza una operación con el archivo especificado;
  • Sendmessage - Envía el mensaje especificado a la ventana o ventanas, esperando una respuesta;
  • SendNotifyMessage - lo mismo, pero no espera una respuesta;
  • Postmensaje - pone el mensaje en la secuencia sin esperar una respuesta;
  • keybd_event - sintetiza presionando una tecla dada en el teclado;
  • mouse_event - sintetiza el movimiento del mouse y las pulsaciones de botones;
  • Findwindow - recupera el asa a la ventana de nivel superior;
  • SetWindowText - coloca el texto en el título de la ventana;
  • GetWindowText - lee el texto del nombre de la ventana;
  • GetWindowTextLength - lee el número de caracteres en el título de la ventana;
  • Getwindow - recupera un identificador de ventana relacionado con la ventana especificada;
  • Ser padre - recupera el identificador de la ventana especificada o principal;
  • Updatewindow - actualiza la ventana del programa;
  • Enablewindow - activa o desactiva la entrada del teclado y el mouse en la ventana o control especificado;
  • DestroyWindow - desactiva la ventana o elimina el foco del teclado;
  • Showwindow - establece el estado de visualización de la ventana especificada;
  • SetActiveWindow - activa la ventana;
  • Ventana animada - le permite crear efectos especiales al mostrar u ocultar ventanas;
  • Ventana Flash - hace que la ventana especificada parpadee una vez;
  • Cerrar ventana - minimiza (pero no cierra) la ventana especificada;
  • Movewindow - cambia la posición y el tamaño de la ventana especificada;
  • SetWindowPos - cambia el tamaño y la posición de una ventana secundaria, emergente o de nivel superior;
  • IsWindowVisible - determina el estado de visibilidad de la ventana especificada;
  • Isicon - determina si la ventana especificada está minimizada;
  • IsZoomed - determina si la ventana está maximizada;
  • Setfocus - establece el foco del teclado en la ventana especificada;
  • Getfocus - recupera un identificador de ventana que tiene el foco del teclado;
  • GetActiveWindow - obtiene el identificador de la ventana activa;
  • IsWindowEnabled - determina si la ventana especificada para entrada de teclado y mouse está habilitada;
  • Cuadro de mensaje - muestra un cuadro de diálogo modal que contiene un icono del sistema, un conjunto de botones y un mensaje corto para una aplicación específica, como información de estado o error;
  • MensajeBeep - reproduce sonido usando el altavoz del sistema;
  • GetSystemMetrics - recupera la métrica del sistema o el parámetro de configuración del sistema especificado;
  • Salir de windows - cerrar sesión del usuario interactivo, apagar el sistema o apagar y reiniciar el sistema;
  • Botón Swapmouse - cambia o restaura el valor de los botones izquierdo y derecho del mouse.

¿Qué haremos hoy?

No consideraremos cada función de la lista; tomaría mucho tiempo y, además, no quiero quitarle la posibilidad de un estudio independiente. Por lo tanto, simplemente resolvemos algunos problemas simples, como:

  • apagar o reiniciar la computadora;
  • iniciar otro programa desde la terminal (por ejemplo, google chrome);
  • reemplazando el nombre de la ventana del programa.

Sí, estas son tareas muy simples, pero su solución puede servir como un buen ejemplo para demostrar las capacidades de las bibliotecas y construir algoritmos más complejos basados ​​en estos ejemplos.

Lanzamiento de la aplicación

Lo primero que debe hacer es declarar una función ShellExecuteW:

// - importa una función desde una DLL externa
#import "shell32.dll"
int ShellExecuteW (int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
#import

Luego, en el método onStart (), ejecute el programa deseado:

ShellExecuteW (NULL, NULL, "C: Archivos de programa (x86) GoogleChromeApplicationchrome.exe", NULL, NULL, 1);

Dejemos caer el script en cualquier gráfico y abriremos el programa especificado.
Ahora incluiremos la biblioteca de terminal WinUser32.mqh en nuestro script:

#include

Ahora necesitamos encontrar el identificador de ventana del programa en ejecución. Esto se puede hacer usando la función WinApi - FindWindowW.
En la biblioteca de terminales, la función se describe de la siguiente manera:

int FindWindowW (string lpClassName, string lpWindowName);

Esto significa que debe ingresar el nombre de la clase de nuestra aplicación en el parámetro string lpClassName y, en lugar del parámetro string lpWindowName, el nombre de la ventana del programa es "Nueva pestaña". El nombre de la clase de aplicación se puede encontrar utilizando utilidades tales como: Spy ++, WinSight, WinInspector y otros. Descargue e instale el programa Spy ++.

La utilidad es muy fácil de usar. Es suficiente para iniciar el programa, presionar el botón con los binoculares y arrastrar la vista a la ventana que necesitamos, e inmediatamente veremos su nombre, clase y otra información. En la función FindWindowW, puede especificar tanto el nombre de la clase como el nombre de la ventana (o individualmente). Será suficiente para nosotros especificar solo el nombre de la ventana:

int handle = FindWindowW (NULL, "Nueva pestaña - Google Chrome");

La información con el identificador de la ventana encontrada se muestra en la pantalla. Si el identificador es 0, no se encontró la ventana. Después de recibir el identificador de la ventana principal, puede hacer lo que quiera con la aplicación: busque la ventana secundaria que necesitamos, lea y envíe texto, presione los botones mediante programación, etc.

Agregue otra función SetWindowTextW simple a nuestro código. Cambiará el texto de la ventana a cualquier otro:

SetWindowTextW (handle, "My Chromchik");

Para apagar la computadora, encontramos el programa shutdown.exe en el disco. Y al igual que en el caso anterior, escribimos en la función la dirección del programa con los parámetros que necesitamos:

ShellExecuteW (NULL, NULL, "C: WindowsSystem32shutdown.exe", "- s -t 00", NULL, 1);

Para apagar la computadora, ingrese la siguiente línea:

shutdown.exe -s -t 00

Para reiniciar la computadora, ingrese la siguiente línea:

shutdown.exe -r -t 00

Para ver las opciones para diferentes versiones de Windows, siga este enlace.

Conclusión

También puede encontrar muchas otras funciones interesantes en la biblioteca WinUser32.mqh que le permitirán administrar un programa de terceros directamente desde un asesor escrito en MQL4. Se puede encontrar una lista completa de las características de WinApi en MSDN.

Por lo tanto, puede controlar completamente su computadora desde un script mql, automatizar todos sus preparativos para el comercio: abrir registros de transacciones, sitios de noticias al abrir un terminal, etc.

También puede escribir un asesor que negociaría en otro terminal de negociación que no sea compatible con la negociación automatizada, por ejemplo, en una aplicación de navegador para opciones binarias o en una plataforma para negociar acciones. Esto abre grandes oportunidades de trabajo y muchas formas diferentes e interesantes de utilizar una gran variedad de programas para recibir, procesar datos y manipular otro software.

Deja Tu Comentario