Wie stelle ich fest, ob die Bildlauftaste gedrückt ist oder nicht und wenn ja, drücke ich sie! - Seite 6

 
LEOK:

Wenn das die Funktion ist, brauche ich noch das Innere davon ...

// 3.2.1 Die Funktion gibt den Zustand des automatischen Bildlaufs des angegebenen Diagramms zurück. Bei Erfolg gibt die Funktion TRUE zurück, andernfalls FALSE.
bool ServiceGetAutoScroll(int hwndChart); // Der Systemdeskriptor des Diagrammfensters, von dem der automatische Bildlaufstatus zurückgegeben wird.

Sie werden mit den Interna der Funktion nicht zufrieden sein. Und ich hätte zu viel von verschiedenen Stellen zu kopieren. Ich habe eine Klasse für die Arbeit mit MT4-Fenstern. Dort wird alles zentral erledigt. Es muss zu viel kopiert werden.

Diese Funktion, zum Beispiel:

// 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.
EXPFUNC(BOOL) ServiceGetAutoScroll(const HWND hwndChart) // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.
 {
  try
   {
    Init(); // Инициализация библиотеки.
    return(MT4_WINDOWS->GetAutoScroll(hwndChart));
   }
  catch(TCHAR* szExclusion)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), szExclusion);
   }
  catch(tstring &sExclusion)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), sExclusion);
   }
  catch(...)
   {
    Utils::Debugging::MessageBoxStop(_T("ServiceGetAutoScroll()"), _T("Системная ошибка!") + LAST_ERROR);
   }
  return(FALSE);
 }

Wird es Ihnen gefallen? Hinter der Methode GetAutoScroll() verbirgt sich eine ganze Klasse.

Nutzen Sie das, was bereits getan wurde, damit Sie Ihre Zeit nicht vergeuden. Andernfalls können Sie mit dem Programmieren beginnen, indem Sie Ihren eigenen Prozessor entwickeln, oder noch besser, indem Sie Silizium abbauen und verarbeiten.

 

Wie auch immer, die erste Version des Skripts scheint irgendwie zu funktionieren!

Natürlich gibt es einfachere und zuverlässigere Versionen, aber die habe ich nie bekommen ...

Das Drehbuch ist beigefügt ...

Dateien:
getpixel.ex4  5 kb
 
Wenn Sie mir den Code zeigen wollen, zeigen Sie mir den Code. Wenn Sie mir den Code nicht zeigen wollen, sagen Sie nichts.
 
FAQ:
Wenn Sie ihn zeigen wollen, zeigen Sie den Code, wenn Sie ihn nicht zeigen wollen, schweigen Sie.


Es wurde also diskutiert und gezeigt ...

In diesem Code ist nichts versteckt, bitte:

#property copyright "Copyright © 2012 ЛЕО"
#import "user32.dll" 
      int      GetWindow            (int, int);
      int      GetAncestor          (int hWnd, int gaFlags);
      int      GetWindowTextLengthA (int);
      int      GetWindowTextA       (int, string, int);
      int      GetWindowDC          (int hWnd);
#import
#import "gdi32.dll" int GetPixel (int hDC, int x, int y);

int         hwnd, hg, h;
string      Name = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
string      pr[2];

int deinit() {ObjectsDeleteAll();Comment ("");}

int start() {
      ObjectsDeleteAll(); Comment ("");
      int hwnd  = GetAncestor (WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
      
      // Первое дочернее окно
      int temp  = GetWindow (hwnd, 5);              
      GetWindowTextA (temp, Name, GetWindowTextLengthA(temp)+1);
      
      // Поиск первого дочернего окна по имени
      if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {
            for (int i=0;i<10;i++) {
                  temp  = GetWindow (temp, 2);  if (temp == 0) break;
                  GetWindowTextA (temp, Name, GetWindowTextLengthA(temp)+1);
                  if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {hg = temp; break;}
            }
      } else hg = temp;
      
      // Поиск второго дочернего окна "Графики"
      int h  = GetWindow (hg, 5);              
      GetWindowTextA (h, Name, GetWindowTextLengthA(h)+1);
      if (Name != "Графики") {
            for (i=0;i<10;i++) {
                  h  = GetWindow (h, 2);  if (h == 0) break;
                  GetWindowTextA (h, Name, GetWindowTextLengthA(h)+1);
                  if (Name == "Графики") break;
            }
      }
      
      // если цвет пикселя кнопки =10526880, значит кнопка нажата, в противном случае нет
      while (!IsStopped()) {
            if (GetPixel (GetWindowDC(h),166,3) == 10526880) pr[0] = "ПРОКРУТКА"; else pr[0] = "прокрутка";
            if (GetPixel (GetWindowDC(h),200,3) == 10526880) pr[1] = " СМЕЩЕНИЕ"; else pr[1] = " смещение";
            Comment ("\n ",pr[0],pr[1]); Sleep(500);
      }
      return(0);
}

 
Mir persönlich ist das eigentlich egal. Wenn ich muss, lese ich die Ex4. Ich mache mir Sorgen um andere Teilnehmer, die dann vielleicht eine ähnliche Frage haben.
 

Schwachstellen im Code:

1. Es gibt keine Verknüpfung mit dem Diagramm. Mit diesem Code wird die Schaltflächenposition jedes aktiven Diagramms abgerufen.

(2) Dieser Code sieht keine autonome Schalttafelposition vor. Das heißt, dieser Code wird nicht immer funktionieren.

(3) Dieser Code funktioniert nur mit der russischen Lokalisierung.

4. Es ist interessant, aber nicht sehr gentlemanlike :-)).

Es ist beängstigend, sich WinAPI-Code in MLQ4 nach C++ anzusehen.

 

Es tut mir leid, ich habe mir einfach ausgedacht, was mir einfiel, ich bin ein Anfänger, kein ACC wie Sie!

Deshalb habe ich darum gebeten, dass der Code veröffentlicht wird, damit es diese 3 Nachteile nicht gibt!

Das mit der Farbe (4. Punkt) habe ich nicht verstanden!?

 
LEOK:

Das mit der Farbe (4. Punkt) verstehe ich nicht!?

Ich bin auch über die Farbe schockiert.
Was ist falsch an TB_ISBUTTONCHECKED ?
 
LEOK:

Es tut mir leid, ich habe mir einfach ausgedacht, was mir einfiel, ich bin ein Anfänger, kein ACC wie Sie!

Deshalb habe ich darum gebeten, dass der Code veröffentlicht wird, damit es diese 3 Nachteile nicht gibt!

Dasmit der Farbe (4. Punkt) verstehe ich nicht!

Es ist eine technische Kultur wie diese. Es ist keine Kultur, Schrauben und Muttern mit einer Zange abzuschrauben. Hierfür gibt es einen Schraubenschlüssel.

Wie man auf diese 3 Nachteile verzichten kann, habe ich schon mehrfach geschrieben.

 
jartmailru:
Ich bin auch schockiert über die Farbe.
Warum ist TB_ISBUTTONCHECKED so lästig?


Man kann nicht sagen: gefällt mir oder gefällt mir nicht, wenn ich es nicht gesehen habe, nicht kenne und nicht ausprobiert habe!

Deshalb bitte ich um Hilfe und noch einmal um ein Codebeispiel mit TB_ISBUTTONCHECKED auf mql4 ...