Populære Indlæg

Redaktørens Valg - 2019

MQL4: Computeradministration fra en rådgiver

Nogle gange er det nødvendigt at programmatisk trykke på en knap i et tredjepartsprogram, læse teksten fra en bestemt komponent, starte en anden terminal, ethvert andet program, åbne en tekstfil, slukke computeren på et bestemt tidspunkt og udføre nogle andre handlinger. WinAPI-funktionen ShellExecute, som er placeret i shell32.dll-biblioteket og WinUser32.mqh-biblioteket, hjælper os her. Sådan automatiseres hele processen - vi lærer af vores nye lektion om programmering af forex-robotter. Emnet er usædvanligt, det vil meget udvide dine færdigheder som programmerer.

Yderligere oplysninger om ShellExecute finder du i MSDN Help. Der kan du få detaljerede oplysninger om alle de tilgængelige funktioner fra WinUser32.mqh-biblioteket. Jeg vil give en kort beskrivelse af hver af dem:

  • ShellExecute - udfører en operation med den specificerede fil;
  • SendMessage - Sender den specificerede meddelelse til vinduet eller vinduerne i vente på et svar;
  • SendNotifyMessage - det samme, men ikke vente på et svar;
  • PostMessage - sætter beskeden i strømmen uden at vente på et svar;
  • keybd_event - syntetiserer at trykke på en given tast på tastaturet;
  • mouse_event - syntetiserer musebevægelse og knaptryk;
  • FindWindow - henter håndtaget til vinduet på øverste niveau;
  • SetWindowText - placerer teksten i vinduet titel;
  • GetWindowText - læser tekst fra vinduesnavnet;
  • GetWindowTextLength - læser antallet af tegn i vinduet titel;
  • GetWindow - henter et vindueshåndtag, der er relateret til det specificerede vindue;
  • GetParent - henter håndtaget i det specificerede eller overordnede vindue;
  • UpdateWindow - opdaterer programvinduet;
  • EnableWindow - aktiverer eller deaktiverer input fra tastatur og mus i det specificerede vindue eller kontrol;
  • DestroyWindow - deaktiverer vinduet eller fjerner tastaturfokus fra det;
  • ShowWindow - indstiller visningstilstanden for det specificerede vindue;
  • SetActiveWindow - aktiverer vinduet;
  • AnimateWindow - giver dig mulighed for at oprette specialeffekter, når du viser eller skjuler vinduer;
  • FlashWindow - får det specificerede vindue til at blinke en gang;
  • CloseWindow - minimerer (men lukker ikke) det specificerede vindue;
  • MoveWindow - ændrer positionen og størrelsen på det specificerede vindue;
  • SetWindowPos - ændrer størrelsen og placeringen af ​​et vindue til et barn, pop-up eller øverste niveau;
  • IsWindowVisible - bestemmer synlighedstilstanden for det specificerede vindue;
  • IsIconic - bestemmer, om det specificerede vindue er minimeret;
  • IsZoomed - bestemmer, om vinduet er maksimeret;
  • SetFocus - sætter tastaturfokus til det specificerede vindue;
  • GetFocus - henter et vindueshåndtag, der har tastaturfokus;
  • GetActiveWindow - får håndtaget i det aktive vindue;
  • IsWindowEnabled - bestemmer, om det specificerede vindue til tastatur- og musinput er aktiveret;
  • MessageBox - viser en modal dialogboks, der indeholder et systemikon, et sæt knapper og en kort besked til et specifikt program, f.eks. status eller fejlinformation;
  • MessageBeep - gengiver lyd ved hjælp af systemhøjttaleren;
  • GetSystemMetrics - henter den specificerede systemmetriske eller systemkonfigurationsparameter;
  • Gå ud af vinduer - logout af den interaktive bruger, lukke systemet eller lukke ned og genstarte systemet;
  • SwapMouseButton - ændrer eller gendanner værdien af ​​venstre og højre museknap.

Hvad skal vi gøre i dag?

Vi vil ikke overveje hver funktion fra listen - det vil tage meget tid, og desuden vil jeg ikke fjerne muligheden for uafhængig undersøgelse fra dig. Derfor løser vi simpelthen et par enkle problemer, såsom:

  • lukke eller genstarte computeren;
  • lancering af et andet program fra terminalen (for eksempel google chrome);
  • udskiftning af navnet på programvinduet.

Ja, dette er meget enkle opgaver, men deres løsning kan godt tjene som et godt eksempel til at demonstrere bibliotekenes muligheder og opbygge mere komplekse algoritmer baseret på disse eksempler.

Start af applikation

Den første ting at gøre er at erklære en ShellExecuteW-funktion:

// - importer en funktion fra en ekstern DLL
#import "shell32.dll"
int ShellExecuteW (int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
#import

Kør derefter det ønskede program i onStart () -metoden:

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

Lad os droppe scriptet på ethvert diagram, og vi åbner det specificerede program.
Nu vil vi inkludere WinUser32.mqh terminalbibliotek i vores script:

#include

Nu skal vi finde vindueshåndtaget til det kørende program. Dette kan gøres ved hjælp af WinApi-funktionen - FindWindowW.
I terminalbiblioteket er funktionen beskrevet som følger:

int FindWindowW (streng lpClassName, streng lpWindowName);

Dette betyder, at du skal indtaste klassens navn på vores applikation i parameteren streng lpClassName, og i stedet for parameteren streng lpWindowName er programvinduet "Ny fane". Navnet på applikationsklassen kan findes ved hjælp af værktøjer som: Spy ++, WinSight, WinInspector og andre. Download og installer Spy ++ -programmet.

Værktøjet er meget let at bruge. Det er nok at starte programmet, trykke på knappen med kikkerten og trække synet til det vindue, vi har brug for, så ser vi dets navn, klasse og anden information. I FindWindowW-funktionen kan du specificere både klassens navn og vinduesnavnet (eller individuelt). Det vil være nok for os at specificere kun vinduesnavnet:

int handle = FindWindowW (NULL, "Ny fane - Google Chrome");

Oplysninger med håndtaget til det fundne vindue vises på skærmen. Hvis håndtaget er 0, blev vinduet ikke fundet. Efter at have modtaget håndtaget i hovedvinduet, kan du gøre hvad du vil med applikationen: kigge efter det barnevindue, vi har brug for, læse og sende tekst, tryk på programmeringsknapper osv.

Tilføj en anden enkel SetWindowTextW-funktion til vores kode. Det vil ændre teksten i vinduet til ethvert andet:

SetWindowTextW (håndtag, "Min Chromchik");

For at slukke for computeren finder vi shutdown.exe-programmet på disken. Og ligesom i det foregående tilfælde skriver vi i funktionen programadressen med de parametre, vi har brug for:

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

For at slukke for computeren skal du indtaste følgende linje:

shutdown.exe -s -t 00

For at genstarte computeren skal du indtaste følgende linje:

shutdown.exe -r -t 00

For at se indstillingerne for forskellige versioner af Windows - følg dette link.

Konklusion

Du kan også finde mange andre interessante funktioner i WinUser32.mqh-biblioteket, der giver dig mulighed for at administrere et tredjepartsprogram direkte fra en rådgiver skrevet i MQL4. En komplet liste over WinApi-funktioner findes på MSDN.

Således kan du fuldstændigt kontrollere din computer fra et mql-script, automatisere alle dine forberedelser til handel: åbne transaktionslogfiler, nyhedssteder, når du åbner en terminal og så videre.

Du kan også skrive en rådgiver, der vil handle i en anden handelsterminal, der ikke understøtter automatisk handel, f.eks. I en browserapplikation til binære optioner eller i en platform til handel med aktier. Dette åbner virkelig store muligheder for arbejde og mange forskellige interessante måder at bruge en lang række programmer til at modtage, behandle data og manipulere anden software.

Efterlad Din Kommentar