판별 방법: 자동 스크롤 버튼이 눌렸는지 눌렸는지 확인하고 눌렸으면 손을 뗍니다!? - 페이지 6

 
LEOK :

이것이 기능이라면 여전히 내부가 필요합니다 ...

// 3.2.1. 이 함수는 지정된 차트의 자동 스크롤 상태를 반환합니다. 함수는 성공하면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다.
부울 ServiceGetAutoScroll(int hwndChart); // 자동 스크롤 상태가 반환되는 차트 창에 대한 시스템 핸들입니다.

당신은 기능의 내부에 만족하지 않을 것입니다. 그리고 다른 곳에서 복사할 것이 너무 많습니다. MT4 창 작업에 대한 수업이 있습니다. 모든 것이 중앙에서 이루어집니다. 너무 많이 복사합니다.

예를 들어 이 함수는 다음과 같습니다.

 // 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);
 }

그게 당신에게 어울릴까요? GetAutoScroll() 메서드 뒤에는 전체 클래스가 있습니다.

시간을 낭비하지 않도록 이미 한 것을 사용하십시오. 그런 다음 자체 프로세서 개발로 프로그래밍을 시작하거나 실리콘 추출 및 처리로 프로그래밍을 시작할 수 있습니다.

 

일반적으로 스크립트의 첫 번째 버전은 어떻게든 작동하는 것 같습니다!

물론 더 간단하고 안정적인 버전이 있지만 결코 보여주지 않았습니다 ...

스크립트를 첨부합니다...

파일:
getpixel.ex4  5 kb
 
이제 이것은 헛소리입니다. 표시하려면 코드를 표시하십시오. 코드를 보여주고 싶지 않다면 조용히 하세요.
 
FAQ :
이제 이것은 헛소리입니다. 표시하려면 코드를 표시하십시오. 코드를 보여주고 싶지 않다면 조용히 하세요.


그래서 그들은 여전히 논의하고 보여주었습니다 ...

이 코드에는 숨겨진 것이 없습니다.

 #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 (5 00 );
      }
       return ( 0 );
}

 
네 저는 개인적으로 별로 상관없습니다. 필요하다면 ex4를 읽겠습니다. 나는 비슷한 질문을 할 수 있는 나머지 참가자들에 대해 걱정하고 있습니다.
 

코드 결함:

1. 차트에 대한 링크가 없습니다. 이 코드는 활성 차트의 버튼 위치를 가져옵니다.

2. 이 코드는 독립형 패널 위치를 포함하지 않습니다. 저것들. 이 코드는 항상 작동하지 않습니다.

3. 이 코드는 러시아어 현지화에서만 작동합니다.

4. 색감이 흥미롭긴 한데 젠틀하지 않아요 :-))

C++ 이후 MLQ4에서 WinAPI 코드를 보는 것은 무섭습니다.

 

미안하지만, 내가 충분한 두뇌를 가지고 그것을 꾸며 냈지 만 나는 당신과 같은 ACC가 아니라 초보자입니다!

그래서 이 3가지 단점이 없도록 코드를 올려달라고 했습니다!

색상(4점)을 잘 몰랐어요!?

 
LEOK :

색상(4점)을 잘 몰랐어요!?

저도 색상보고 깜짝놀랐어요.
왜 TB_ISBUTTONCHECKED를 그렇게 좋아하지 않았습니까?
 
LEOK :

미안하지만, 내가 충분한 두뇌를 가지고 그것을 꾸며 냈지 만 나는 당신과 같은 ACC가 아니라 초보자입니다!

그래서 이 3가지 단점이 없도록 코드를 올려달라고 했습니다!

색상(4점)을 잘 몰랐어요!?

이것은 기술 문화입니다. 볼트와 너트는 문화적으로 플라이어로 나사를 풀지 않습니다. 이를 위한 렌치가 있습니다.

이 3가지 단점 없이 하는 방법은 이미 여러 번 썼습니다.

 
jartmailru :
저도 색상보고 깜짝놀랐어요.
왜 TB_ISBUTTONCHECKED를 그렇게 좋아하지 않았습니까?


당신은 말할 수 없습니다 : 좋든 싫든, 내가 그것을 본 적이 없다면 그것이 무엇인지 모르고 시도하지 않았습니다!

그렇기 때문에 도움을 요청하고 다시 한 번 mql4에서 TB_ISBUTTONCHECKED가 있는 코드의 예를 들어 달라고 요청합니다...