#import "user32.dll"
int GetWindow (int, int);
int FindWindowExA (int, int, string, string);
int GetParent (int hWnd);
bool GetCursorPos (int& Pos[2]);
bool GetWindowRect (int hWnd,int& Pos[4]);
int GetKeyState (int button);
void mouse_event (int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
int GetAncestor (int hWnd, int gaFlags);
int GetWindowTextLengthA (int);
int GetWindowTextA (int, string, int);
#import
#import "gdi32.dll" int GetPixel (int hDC, int x, int y);
int Pos[2];
int rect[4];
int hwnd, hg, h;
int X, Y;
string Name = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
int deinit() {ObjectsDeleteAll();Comment ("");}
int start() {
ObjectsDeleteAll(); Comment ("");
int hwnd = GetAncestor ( WindowHandle ( Symbol (), Period ()), 2 ); //дескриптор основного окна терминалаint temp = GetWindow (hwnd, 5 );
int Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+ 1 );
if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты" ) {
for ( int i= 0 ;i< 10 ;i++) {
temp = GetWindow (temp, 2 ); if (temp == 0 ) break ;
Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+ 1 );
if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты" ) {hg = temp; break ;}
}
} else hg = temp;
int h = GetWindow (hg, 5 );
Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+ 1 );
if (Name != "Графики" ) {
for (i= 0 ;i< 10 ;i++) {
h = GetWindow (h, 2 ); if (h == 0 ) break ;
Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+ 1 );
if (Name == "Графики" ) break ;
}
}
Print (DecToHex(h, 8 ));
while (!IsStopped()) {
GetWindowRect (h,rect);
GetCursorPos (Pos);
X = Pos[0] - rect[0];
Y = Pos[1] - rect[1];
Comment ("X= ",X,"\n","Y= ",Y); Sleep(100);
}
return(0);
}
string DecToHex (int n, int dig) {
string s[], r="";
string Sym[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
ArrayResize (s,dig);
for (int i=0; i<dig; i++) s[i]="0";
i = dig-1;
while (n != 0) {s[i] = Sym[n%16]; n = n>>4; i--; }
for (i=0; i<dig; i++) r=r+s[i];
return (r);
}
Tamam, bu soruna başka bir yerde bir çözüm arayacağım.
Rahatsızlıktan dolayı özür dileriz...
Orada, başlıkta, kod ve bir örnek. Alınma. Yaptığınız şey uzun zamandır bu forumda farklı versiyonlarda birçok kez kararlaştırıldı. Kitaplığımda bulunan WinUser32.mqh başlığına bakmanız yeterli. Tüm kodlar var. Bu konuda zaten birkaç kez yazdım.
Bu konuyla ilgili bir örnek olduğunu düşündüğünüzü buraya kopyalayın?!
Sadece şunu buldum:
// 3.1.1. İşlev, belirtilen grafiğin otomatik kaydırılmasını etkinleştirir/devre dışı bırakır. geçersiz ServiceAutoScroll(int hwndChart); // Otomatik kaydırmanın devre dışı bırakıldığı grafik penceresine giden sistem tutamacı. //============================================== ================================================== ================================================== ============== // 3.1.2. İşlev, belirtilen grafiğin ofsetini etkinleştirir/devre dışı bırakır. Başarılı olursa, yöntem TRUE, değilse FALSE döndürür. bool ServiceShift(int hwndChart); // Ofsetin etkinleştirildiği/devre dışı bırakıldığı grafik penceresinin sistem tutamacı.
Bu konuyla ilgili bir örnek olduğunu düşündüğünüzü buraya kopyalayın?!
Sadece şunu buldum:
// 3.1.1. İşlev, belirtilen grafiğin otomatik kaydırılmasını etkinleştirir/devre dışı bırakır. geçersiz ServiceAutoScroll(int hwndChart); // Otomatik kaydırmanın devre dışı bırakıldığı grafik penceresine giden sistem tutamacı.
// 3.1.2. İşlev, belirtilen grafiğin ofsetini etkinleştirir/devre dışı bırakır. Başarılı olursa, yöntem TRUE, aksi takdirde FALSE döndürür. bool ServiceShift(int hwndChart); // Ofsetin etkinleştirildiği/devre dışı bırakıldığı grafik penceresinin sistem tutamacı.
Ama gerekli değil!
Kütüphaneden bahsetmedim. Ama eğer bir kütüphaneden bahsediyorsak, o zaman bir fonksiyon var:
// 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.bool ServiceGetAutoScroll( int hwndChart); // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.
Yukarıda WinUser32.mqh hakkında yazdım. Kontrol kodları var.
int max = SendMessage( hwndTaskbar, TB_BUTTONCOUNT, 0, 0);
Lütfen söyle. TB_BUTTONCOUNT, TB_ISBUTTONPRESSED ?!
Bir düğme ve durumunu tanımlamak istiyorum!
Araç çubuğundaki hangi komutu düğmeler arasında sıralayabilir ve doğru olanı bulabilirsiniz?
Belki biri yapmıştır?
Grafik penceresi tutamacı bulundu:
int deinit() {ObjectsDeleteAll();Comment ("");}int start() { ObjectsDeleteAll(); Comment (""); int hwnd = GetAncestor ( WindowHandle ( Symbol (), Period ()), 2 ); //дескриптор основного окна терминала int temp = GetWindow (hwnd, 5 ); int Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+ 1 ); if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты" ) { for ( int i= 0 ;i< 10 ;i++) { temp = GetWindow (temp, 2 ); if (temp == 0 ) break ; Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+ 1 ); if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты" ) {hg = temp; break ;} } } else hg = temp; int h = GetWindow (hg, 5 ); Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+ 1 ); if (Name != "Графики" ) { for (i= 0 ;i< 10 ;i++) { h = GetWindow (h, 2 ); if (h == 0 ) break ; Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+ 1 ); if (Name == "Графики" ) break ; } } Print (DecToHex(h, 8 )); while (!IsStopped()) { GetWindowRect (h,rect); GetCursorPos (Pos); X = Pos[0] - rect[0]; Y = Pos[1] - rect[1]; Comment ("X= ",X,"\n","Y= ",Y); Sleep(100); } return(0); }string DecToHex (int n, int dig) { string s[], r=""; string Sym[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; ArrayResize (s,dig); for (int i=0; i<dig; i++) s[i]="0"; i = dig-1; while (n != 0) {s[i] = Sym[n%16]; n = n>>4; i--; } for (i=0; i<dig; i++) r=r+s[i]; return (r); }Bir şey anlamadım... Neden?! Şiddetle şaşırttı. Başlığıma baktın mı? Kodlara bakılırsa, hayır.
Grafikteki herhangi bir komut, bir fonksiyon, bir kod satırıdır.
Bir şey anlamadım... Neden?! Şiddetle şaşırttı. Başlığıma baktın mı? Koda bakılırsa, hayır.
Grafikteki herhangi bir komut, bir fonksiyon, bir kod satırıdır.
Tamam, bu soruna başka bir yerde bir çözüm arayacağım.
Rahatsızlıktan dolayı özür dileriz...
Tamam, bu soruna başka bir yerde bir çözüm arayacağım.
Rahatsızlıktan dolayı özür dileriz...
Orada, başlıkta, kod ve bir örnek.
Bu konuyla ilgili bir örnek olduğunu düşündüğünüzü buraya kopyalayın?!
Sadece şunu buldum:
// 3.1.1. İşlev, belirtilen grafiğin otomatik kaydırılmasını etkinleştirir/devre dışı bırakır.
geçersiz ServiceAutoScroll(int hwndChart); // Otomatik kaydırmanın devre dışı bırakıldığı grafik penceresine giden sistem tutamacı.
//============================================== ================================================== ================================================== ==============
// 3.1.2. İşlev, belirtilen grafiğin ofsetini etkinleştirir/devre dışı bırakır. Başarılı olursa, yöntem TRUE, değilse FALSE döndürür.
bool ServiceShift(int hwndChart); // Ofsetin etkinleştirildiği/devre dışı bırakıldığı grafik penceresinin sistem tutamacı.
Ama gerekli değil!
Bu konuyla ilgili bir örnek olduğunu düşündüğünüzü buraya kopyalayın?!
Eğer işlev buysa, o zaman hala iç kısmına ihtiyacım var ...
// 3.2.1. İşlev, belirtilen grafikte otomatik kaydırma durumunu döndürür. İşlev başarılıysa TRUE, değilse FALSE döndürür.
bool ServiceGetAutoScroll(int hwndChart); // Otomatik kaydırma durumunun döndürüldüğü grafik penceresinin sistem tanıtıcısı.
Bu konuyla ilgili bir örnek olduğunu düşündüğünüzü buraya kopyalayın?!
Sadece şunu buldum:
// 3.1.1. İşlev, belirtilen grafiğin otomatik kaydırılmasını etkinleştirir/devre dışı bırakır.
geçersiz ServiceAutoScroll(int hwndChart); // Otomatik kaydırmanın devre dışı bırakıldığı grafik penceresine giden sistem tutamacı.
// 3.1.2. İşlev, belirtilen grafiğin ofsetini etkinleştirir/devre dışı bırakır. Başarılı olursa, yöntem TRUE, aksi takdirde FALSE döndürür.
bool ServiceShift(int hwndChart); // Ofsetin etkinleştirildiği/devre dışı bırakıldığı grafik penceresinin sistem tutamacı.
Ama gerekli değil!
Kütüphaneden bahsetmedim. Ama eğer bir kütüphaneden bahsediyorsak, o zaman bir fonksiyon var:
Yukarıda WinUser32.mqh hakkında yazdım. Kontrol kodları var.