Articles Populaires

Choix De L'Éditeur - 2019

MQL4: Gestion de l'ordinateur à partir d'un conseiller

Il est parfois nécessaire d’appuyer par programme sur un bouton dans une application tierce, de lire le texte d’un composant spécifique, de démarrer un autre terminal, tout autre programme, d’ouvrir un fichier texte, d’éteindre l'ordinateur à un moment donné et d'effectuer certaines autres opérations. La fonction WinAPI ShellExecute, située dans la bibliothèque shell32.dll et la bibliothèque WinUser32.mqh, nous aidera ici. Comment automatiser tout ce processus - nous apprenons de notre nouvelle leçon sur la programmation de robots forex. Le sujet est inhabituel, cela élargira considérablement vos compétences en tant que programmeur.

Pour plus d'informations sur ShellExecute, consultez l'aide de MSDN. Vous pouvez y obtenir des informations détaillées sur toutes les fonctions disponibles dans la bibliothèque WinUser32.mqh. Je vais donner une brève description de chacun d’eux:

  • Shellexecute - effectue une opération avec le fichier spécifié;
  • Envoyer message - Envoie le message spécifié à la fenêtre ou aux fenêtres, en attente d'une réponse;
  • SendNotifyMessage - le même, mais n'attend pas de réponse;
  • Postmessage - place le message dans le flux sans attendre de réponse;
  • keybd_event - synthétise en appuyant sur une touche donnée du clavier;
  • mouse_event - synthétise les mouvements de la souris et les pressions sur les boutons;
  • Findwindow - récupère le descripteur dans la fenêtre de niveau supérieur;
  • SetWindowText - place le texte dans le titre de la fenêtre;
  • GetWindowText - lit le texte du nom de la fenêtre;
  • GetWindowTextLength - lit le nombre de caractères dans le titre de la fenêtre;
  • Getwindow - récupère un handle de fenêtre associé à la fenêtre spécifiée;
  • Getparent - récupère le handle de la fenêtre spécifiée ou parente;
  • Fenêtre de mise à jour - met à jour la fenêtre du programme;
  • Enablewindow - active ou désactive la saisie au clavier et à la souris dans la fenêtre ou le contrôle spécifié;
  • DétruireFenêtre - désactive la fenêtre ou en supprime le focus clavier;
  • Vitrine - définit l'état d'affichage de la fenêtre spécifiée;
  • SetActiveWindow - active la fenêtre;
  • Animatewindow - vous permet de créer des effets spéciaux lors de l'affichage ou du masquage des fenêtres;
  • Flashwindow - fait clignoter la fenêtre spécifiée une fois;
  • Fenêtre étroite - minimise (mais ne ferme pas) la fenêtre spécifiée;
  • Movewindow - change la position et la taille de la fenêtre spécifiée;
  • SetWindowPos - modifie la taille et la position d'une fenêtre enfant, contextuelle ou de niveau supérieur;
  • IsWindowVisible - détermine l'état de visibilité de la fenêtre spécifiée;
  • Isicon - détermine si la fenêtre spécifiée est minimisée;
  • IsZoomed - détermine si la fenêtre est maximisée;
  • Setfocus - définit le focus du clavier sur la fenêtre spécifiée;
  • Getfocus - récupère une poignée de fenêtre ayant le focus du clavier;
  • GetActiveWindow - récupère le handle de la fenêtre active;
  • IsWindowEnabled - détermine si la fenêtre spécifiée pour la saisie au clavier et à la souris est activée;
  • Boîte à message - affiche une boîte de dialogue modale contenant une icône système, un ensemble de boutons et un message court pour une application spécifique, telle que des informations d'état ou d'erreur;
  • MessageBeep - reproduit le son à l'aide du haut-parleur du système;
  • GetSystemMetrics - récupère la métrique système spécifiée ou le paramètre de configuration système;
  • Fenêtres de sortie - déconnecter l'utilisateur interactif, éteindre le système ou éteindre et redémarrer le système;
  • Swapmousebutton - modifie ou restaure la valeur des boutons gauche et droit de la souris.

Que ferons-nous aujourd'hui?

Nous ne tiendrons pas compte de chaque fonction de la liste - cela prendrait beaucoup de temps et, en outre, je ne veux pas vous priver de la possibilité d’une étude indépendante. Par conséquent, nous résolvons simplement quelques problèmes simples, tels que:

  • éteindre ou redémarrer l'ordinateur;
  • lancer un autre programme à partir du terminal (par exemple, Google Chrome);
  • Remplacement du nom de la fenêtre du programme

Oui, ce sont des tâches très simples, mais leur solution pourrait bien servir d'exemple pour illustrer les capacités des bibliothèques et construire des algorithmes plus complexes basés sur ces exemples.

Lancement de l'application

La première chose à faire est de déclarer une fonction ShellExecuteW:

// - importer une fonction à partir d'une DLL externe
#import "shell32.dll"
int ShellExecuteW (int hwnd, chaîne lpOperation, chaîne lpFichier, chaîne lpParameters, chaîne lpDirectory, int nShowCmd);
#import

Ensuite, dans la méthode onStart (), exécutez le programme souhaité:

ShellExecuteW (NULL, NULL, "C: Fichiers de programme (x86) GoogleChromeApplicationchrome.exe", NULL, NULL, 1);

Laissons le script sur n'importe quel graphique et nous ouvrirons le programme spécifié.
Nous allons maintenant inclure la bibliothèque de terminaux WinUser32.mqh dans notre script:

#include

Nous devons maintenant trouver le handle de fenêtre du programme en cours d'exécution. Cela peut être fait en utilisant la fonction WinApi - FindWindowW.
Dans la bibliothèque de terminaux, la fonction est décrite comme suit:

int FindWindowW (string lpClassName, string lpWindowName);

Cela signifie que vous devez entrer le nom de la classe de notre application dans le paramètre string lpClassName et qu'au lieu du paramètre string lpWindowName, le nom de la fenêtre du programme est «New Tab». Le nom de la classe d'application peut être trouvé à l'aide d'utilitaires tels que: Spy ++, WinSight, WinInspector et autres. Téléchargez et installez le programme Spy ++.

L'utilitaire est très facile à utiliser. Il suffit de démarrer le programme, d'appuyer sur le bouton avec les jumelles et de faire glisser le viseur vers la fenêtre dont vous avez besoin. Nous verrons immédiatement son nom, sa classe et d'autres informations. Dans la fonction FindWindowW, vous pouvez spécifier le nom de la classe et le nom de la fenêtre (ou individuellement). Il nous suffira de spécifier uniquement le nom de la fenêtre:

int handle = FindWindowW (NULL, "Nouvel onglet - Google Chrome");

Les informations avec la poignée de la fenêtre trouvée sont affichées à l'écran. Si le descripteur est 0, la fenêtre n'a pas été trouvée. Après avoir reçu le descriptif de la fenêtre principale, vous pouvez faire ce que vous voulez avec l'application: recherchez la fenêtre enfant dont vous avez besoin, lisez et envoyez du texte, appuyez sur les boutons par programmation, etc.

Ajoutez une autre fonction SetWindowTextW simple à notre code. Cela changera le texte de la fenêtre en un autre:

SetWindowTextW (handle, "Mon Chromchik");

Pour éteindre l'ordinateur, nous trouvons le programme shutdown.exe sur le disque. Et comme dans le cas précédent, nous écrivons dans la fonction l'adresse du programme avec les paramètres nécessaires:

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

Pour éteindre l'ordinateur, entrez la ligne suivante:

shutdown.exe -s -t 00

Pour redémarrer l'ordinateur, entrez la ligne suivante:

shutdown.exe -r -t 00

Pour voir les options des différentes versions de Windows, suivez ce lien.

Conclusion

Vous pouvez également trouver de nombreuses autres fonctions intéressantes dans la bibliothèque WinUser32.mqh qui vous permettront de gérer un programme tiers directement à partir d'un conseiller écrit en MQL4. Une liste complète des fonctionnalités WinApi est disponible sur MSDN.

Ainsi, vous pouvez totalement contrôler votre ordinateur à partir d'un script mql, automatiser toutes vos préparations de trading: journaux de transactions ouverts, sites d'actualités lors de l'ouverture d'un terminal, etc.

Vous pouvez également écrire un conseiller qui échangerait dans un autre terminal de négociation qui ne prend pas en charge la négociation automatisée, par exemple, dans une application de navigateur pour les options binaires ou dans une plate-forme pour le négoce d'actions. Cela ouvre vraiment de grandes opportunités pour le travail et de nombreuses façons intéressantes d'utiliser une grande variété de programmes pour recevoir, traiter des données et manipuler d'autres logiciels.

Laissez Vos Commentaires