Automatisierung mit Abfangen von Tasten und Mausklicks. - Seite 5

 
xeon >> :

Es war ein gutes Terminal : -)))

Wir alle haben so ein Terminal. Und sie hat in gewisser Weise einen roten Knopf in sich.

Nur muss man sich selbst mit einem Schlagstock auf den Kopf schlagen. :))

 

Ilnur, der Text der Schaltfläche kann auch irgendwie gelesen werden. Das Programm Spy++ liest sie.



d.h. die Logik ist, dass wir, solange die Schaltfläche auf "Stop" gesetzt ist, auf weitere Aktionen warten, die durchgeführt werden.

Geben Sie mir eine Funktion aus User32.dll, die den Text der Schaltfläche korrekt ausgibt.



GetDlgItemText-Funktion

Beschreibung:
function GetDlgItemText(Dlg: HWnd; IDDlgItem: Integer; Str: PChar; MaxCount: Integer): Integer;
Liest den Text des Controls.
Parameter:
Dlg: Bezeichner des Dialogfelds.
IDDlgItem: Die ID des Elements.
Str: Puffer für den Empfang von Text.
MaxCount: Die Größe des Puffers.
Zurückgegebener Wert:
Die tatsächliche Anzahl der kopierten Zeichen.


#import "user32.dll"

string GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

#import


Habe ich die Funktion richtig angeschlossen?


Denn das Terminal zeigt mir in den Protokollen

2008.11.15 21:03:41 tester EURUSD,H1: kann Funktion 'GetDlgItemText' aus dll 'user32.dll' nicht aufrufen (Fehler 127)

 
xeon >> :

Das war ein gutes Terminal : -)))

Xeon, du bist derjenige, der damit angefangen hat....

Ich selbst wäre diesen Schritt nicht gegangen... aber ich brauche es nicht....

 
HIDDEN >> :

. . .

#import "user32.dll"

string GetDlgItemText (int hWnd, int IDDlgItem, string PChar, int MaxCount);

#import


Habe ich die Funktion richtig angeschlossen?


Denn das Terminal zeigt mir in den Protokollen

2008.11.15 21:03:41 tester EURUSD,H1: kann Funktion 'GetDlgItemText' aus dll 'user32.dll' nicht aufrufen (Fehler 127)

Es ist eher so. . .
#import "user32.dll"
   int GetDlgItemTextA(int hWnd, int IDDlgItem, string PChar, int MaxCount);
#import
 
Ilnur >> :
>> es ist eher so. . .

Das Ergebnis ist eine ganze Zahl, aber Sie brauchen den Text der Schaltfläche.

 
HIDDEN >> :

Das Ergebnis ist eine ganze Zahl, aber Sie brauchen den Text der Schaltfläche.

Der Text wird im PChar-Stringpuffer zurückgegeben.

Die Funktion selbst gibt die tatsächliche Anzahl der gelesenen Zeichen zurück.

 
HIDDEN >> :

Ilnur, der Text der Schaltfläche kann auch irgendwie gelesen werden. Das Programm Spy++ liest sie.


Hier ist ein Beispiel für ein Skript, das einen Strategietester startet und auf dessen Abschluss wartet. Der Text der Schaltfläche wird mit GetWindowTextA() ausgelesen.

Interessanterweise muss das Prüferfenster in diesem Fall nicht unbedingt sichtbar sein.


#include <WinUser32.mqh>

#import "user32.dll"
   int GetAncestor(int hWnd, int gaFlags);
   int GetDlgItem(int hDlg, int nIDDlgItem);
#import

void start()
{
   int hMetaTrader, hTerminal, hTester, hButtonStart;
      
   hMetaTrader = GetAncestor(WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
	
   hTerminal = GetDlgItem(hMetaTrader,0xE81E);
   hTester = GetDlgItem(hTerminal,0x53);
   hButtonStart = GetDlgItem(GetDlgItem(hTester,0x81BF),0x40A);  //дескриптор кнопки "Старт"
	
   PostMessageA(GetDlgItem(hTester,0x81BF),WM_COMMAND,0x40A,hButtonStart); //нажимаем кнопку старт
   
   Print("Запуск тестера стратегий");
   string sButtonStartName = "";
   while(!IsStopped()) 
   {
      Sleep(3000);
      GetWindowTextA(hButtonStart,sButtonStartName,6); //считываем текст кнопки запуска тестера
      if(sButtonStartName=="Старт")                    
      {
         Print("Работа тестера завершена");
         break;
      }
   }
}
 
Ilnur >> :

Hier ist ein Beispiel für ein Skript, das einen Strategietester startet und auf dessen Abschluss wartet. Der Text der Schaltfläche wird mit GetWindowTextA() ausgelesen.

Interessanterweise muss das Prüffenster nicht sichtbar sein.


Ich danke Ihnen vielmals. Wo kann ich zumindest etwas über all diese Funktionen lesen und mir Beispiele für ihre Verwendung ansehen? Ich habe im ganzen Internet danach gesucht, aber es ist nicht sehr hilfreich. Vielleicht gibt es ein gutes Buch über Win API? Eine bloße Beschreibung, was die Funktion tut, reicht nicht aus.

 
HIDDEN >> :

Ich danke Ihnen vielmals. Wo kann ich zumindest etwas über all diese Funktionen lesen und mir Beispiele für ihre Verwendung ansehen? Ich habe im ganzen Internet danach gesucht, aber es ist nicht sehr hilfreich. Vielleicht gibt es ein gutes Buch über Win API? Eine bloße Beschreibung der Aufgaben dieser Funktion ist möglicherweise nicht ausreichend.

Alle Informationen über WinAPI-Funktionen beziehe ich von MSDN. Ich bin es so gewohnt.

P.S. Ich habe leider noch nie ein gutes Buch über WinAPI gesehen.

 
Ilnur >> :

Ich beziehe alle Informationen über WinAPI-Funktionen von MSDN. Ich bin mehr an .... gewöhnt.


P.S. Leider habe ich noch nie ein gutes Buch über WinAPI gesehen.

Wie werden die Menüs, die auf die erste Maustaste hin geöffnet werden, abgefangen? Wenn Sie vom Terminal aus zu einem anderen Programm wechseln, verschwindet das Menü und Sie können es nicht mehr auffinden. Gibt es eine Möglichkeit, das Programm zu stoppen?