Beliebte Beiträge

Tipp Der Redaktion - 2019

MQL4: Computerverwaltung von einem Berater

Manchmal ist es erforderlich, in einer Drittanbieteranwendung programmgesteuert eine Taste zu drücken, den Text einer bestimmten Komponente zu lesen, ein anderes Terminal oder ein anderes Programm zu starten, eine Textdatei zu öffnen, den Computer zu einem bestimmten Zeitpunkt auszuschalten und andere Vorgänge auszuführen. Die WinAPI-Funktion ShellExecute, die sich in der Bibliothek shell32.dll und in der Bibliothek WinUser32.mqh befindet, hilft uns dabei. Wie man diesen ganzen Prozess automatisiert - wir lernen aus unserer neuen Lektion über das Programmieren von Forex-Robotern. Das Thema ist ungewöhnlich, es wird Ihre Fähigkeiten als Programmierer erheblich erweitern.

Weitere Informationen zu ShellExecute finden Sie in der MSDN-Hilfe. Dort erhalten Sie detaillierte Informationen zu allen in der Bibliothek WinUser32.mqh verfügbaren Funktionen. Ich werde eine kurze Beschreibung von jedem von ihnen geben:

  • Shellexecute - führt eine Operation mit der angegebenen Datei durch;
  • Nachricht senden - Sendet die angegebene Nachricht an das oder die Fenster und wartet auf eine Antwort.
  • SendNotifyMessage - das gleiche, aber wartet nicht auf eine Antwort;
  • Postmessage - stellt die Nachricht in den Stream, ohne auf eine Antwort zu warten;
  • keybd_event - synthetisiert das Drücken einer bestimmten Taste auf der Tastatur;
  • mouse_event - synthetisiert Mausbewegungen und Tastendrücke;
  • Suchfenster - Ruft das Handle zum Fenster der obersten Ebene ab.
  • SetWindowText - fügt den Text in den Fenstertitel ein;
  • GetWindowText - liest Text aus dem Fensternamen;
  • GetWindowTextLength - liest die Anzahl der Zeichen im Fenstertitel;
  • Getwindow - ruft ein Fensterhandle ab, das sich auf das angegebene Fenster bezieht;
  • Eltern werden - ruft das Handle des angegebenen oder übergeordneten Fensters ab;
  • Aktualisierungsfenster - aktualisiert das Programmfenster;
  • Fenster aktivieren - Aktiviert oder deaktiviert die Tastatur- und Mauseingabe im angegebenen Fenster oder Steuerelement.
  • DestroyWindow - Deaktiviert das Fenster oder entfernt den Tastaturfokus.
  • Schaufenster - legt den Anzeigestatus des angegebenen Fensters fest;
  • SetActiveWindow - aktiviert das Fenster;
  • Animationsfenster - Ermöglicht das Erstellen von Spezialeffekten beim Anzeigen oder Ausblenden von Fenstern.
  • Flashfenster - Lässt das angegebene Fenster einmal blinken;
  • Schließfenster - minimiert das angegebene Fenster (schließt es jedoch nicht);
  • Bewegungsfenster - ändert die Position und Größe des angegebenen Fensters;
  • SetWindowPos - Ändert die Größe und Position eines untergeordneten Fensters, Popup-Fensters oder Fensters der obersten Ebene.
  • IsWindowVisible - bestimmt den Sichtbarkeitsstatus des angegebenen Fensters;
  • Isicon - bestimmt, ob das angegebene Fenster minimiert ist;
  • IsZoomed - bestimmt, ob das Fenster maximiert ist;
  • Setfocus - setzt den Tastaturfokus auf das angegebene Fenster;
  • Getfocus - ruft ein Fensterhandle mit Tastaturfokus ab;
  • GetActiveWindow - erhält das Handle des aktiven Fensters;
  • IsWindowEnabled - bestimmt, ob das angegebene Fenster für die Tastatur- und Mauseingabe aktiviert ist;
  • Messagebox - Zeigt ein modales Dialogfeld mit einem Systemsymbol, einer Reihe von Schaltflächen und einer Kurznachricht für eine bestimmte Anwendung an, z. B. Status- oder Fehlerinformationen.
  • MessageBeep - Gibt den Ton über den Systemlautsprecher wieder.
  • GetSystemMetrics - Ruft die angegebene Systemmetrik oder den angegebenen Systemkonfigurationsparameter ab.
  • Fenster verlassen - Abmelden des interaktiven Benutzers, Herunterfahren des Systems oder Herunterfahren und Neustarten des Systems;
  • Swapmousebutton - ändert oder stellt den Wert der linken und rechten Maustaste wieder her.

Was machen wir heute?

Wir werden nicht jede Funktion in der Liste berücksichtigen - es würde viel Zeit in Anspruch nehmen und außerdem möchte ich Ihnen nicht die Möglichkeit nehmen, unabhängig von Ihnen zu lernen. Deshalb lösen wir einfach ein paar einfache Probleme, wie zum Beispiel:

  • Herunterfahren oder Neustarten des Computers;
  • Starten eines anderen Programms vom Terminal aus (z. B. Google Chrome);
  • Ersetzen des Programmfensternamens.

Ja, dies sind sehr einfache Aufgaben, aber ihre Lösung kann durchaus als gutes Beispiel dienen, um die Fähigkeiten von Bibliotheken zu demonstrieren und komplexere Algorithmen basierend auf diesen Beispielen zu erstellen.

Anwendungsstart

Als erstes deklarieren Sie eine ShellExecuteW-Funktion:

// - eine Funktion aus einer externen DLL importieren
#import "shell32.dll"
int ShellExecuteW (int hwnd, Zeichenfolge lpOperation, Zeichenfolge lpFile, Zeichenfolge lpParameters, Zeichenfolge lpDirectory, int nShowCmd);
#import

Führen Sie dann in der Methode onStart () das gewünschte Programm aus:

ShellExecuteW (NULL, NULL, "C: Programme (x86) GoogleChromeApplicationchrome.exe", NULL, NULL, 1);

Lassen Sie uns das Skript auf einem beliebigen Diagramm ablegen und das angegebene Programm öffnen.
Jetzt werden wir die Terminalbibliothek WinUser32.mqh in unser Skript aufnehmen:

#include

Jetzt müssen wir das Fensterhandle des laufenden Programms finden. Dies kann mit der WinApi-Funktion - FindWindowW erfolgen.
In der Terminalbibliothek wird die Funktion wie folgt beschrieben:

int FindWindowW (string lpClassName, string lpWindowName);

Dies bedeutet, dass Sie den Klassennamen unserer Anwendung in den Parameter string lpClassName eingeben müssen. Statt des Parameters string lpWindowName lautet der Name des Programmfensters "New Tab". Der Name der Anwendungsklasse kann mit folgenden Dienstprogrammen ermittelt werden: Spy ++, WinSight, WinInspector und andere. Laden Sie das Spy ++ - Programm herunter und installieren Sie es.

Das Dienstprogramm ist sehr einfach zu bedienen. Es reicht aus, das Programm zu starten, den Knopf mit dem Fernglas zu drücken und das Visier auf das gewünschte Fenster zu ziehen. Der Name, die Klasse und andere Informationen werden sofort angezeigt. In der FindWindowW-Funktion können Sie sowohl den Klassennamen als auch den Fensternamen (oder einzeln) angeben. Es wird uns ausreichen, nur den Fensternamen anzugeben:

int handle = FindWindowW (NULL, "Neuer Tab - Google Chrome");

Informationen mit dem Handle des gefundenen Fensters werden auf dem Bildschirm angezeigt. Wenn das Handle 0 ist, wurde das Fenster nicht gefunden. Nachdem Sie das Handle des Hauptfensters erhalten haben, können Sie mit der Anwendung nach Belieben vorgehen: Suchen Sie das von uns benötigte untergeordnete Fenster, lesen und senden Sie Text, drücken Sie programmgesteuert die Tasten usw.

Fügen Sie unserem Code eine weitere einfache SetWindowTextW-Funktion hinzu. Es ändert den Text des Fensters in einen anderen:

SetWindowTextW (handle, "My Chromchik");

Zum Ausschalten des Computers befindet sich das Programm shutdown.exe auf der Festplatte. Und wie im vorigen Fall schreiben wir in die Funktion die Programmadresse mit den Parametern, die wir brauchen:

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

Geben Sie die folgende Zeile ein, um den Computer auszuschalten:

shutdown.exe -s -t 00

Geben Sie die folgende Zeile ein, um den Computer neu zu starten:

shutdown.exe -r -t 00

Um die Optionen für verschiedene Windows-Versionen anzuzeigen, folgen Sie diesem Link.

Fazit

In der Bibliothek WinUser32.mqh finden Sie auch viele andere interessante Funktionen, mit denen Sie ein Programm eines Drittanbieters direkt von einem in MQL4 geschriebenen Berater aus verwalten können. Eine vollständige Liste der WinApi-Funktionen finden Sie auf MSDN.

Auf diese Weise können Sie Ihren Computer vollständig über ein mql-Skript steuern und alle Vorbereitungen für den Handel automatisieren: Öffnen von Transaktionsprotokollen, Nachrichtenseiten beim Öffnen eines Terminals usw.

Sie können auch einen Berater schreiben, der in einem anderen Handelsterminal handelt, das den automatisierten Handel nicht unterstützt, z. B. in einer Browseranwendung für binäre Optionen oder in einer Plattform für den Handel mit Aktien. Dies eröffnet wirklich großartige Arbeitsmöglichkeiten und viele interessante Möglichkeiten, eine Vielzahl von Programmen zum Empfangen, Verarbeiten von Daten und Manipulieren anderer Software zu verwenden.

Sehen Sie sich das Video an: Robot Building Tutorials #6 - Intro to MQL4 (Dezember 2019).

Lassen Sie Ihren Kommentar