Hatalar, hatalar, sorular - sayfa 2522

 

WinAPI hakkında yardım istiyorum. Bu iki şeyi MT5'te yapabilmeniz gerekir.

Gösterilen menüyü açın ve raporu kaydetmeyi seçin.


Gösterilen menüyü açın ve ayarlanan dosyayı yüklemeyi seçin.


MT4'te bunun gibi şeyler çok kolaydır. MT5'te çalışmıyor.

Onlar. sadece menüyü aramanız ve içindeki uygun öğeyi seçmeniz yeterlidir. Ama çıkmıyor.


PS İhtiyacınız var gibi görünüyor

 

2. görevin bağlam menüsünü çağırmak için bir Mesaj günlüğü yazarsanız, aşağıdaki sonucu alabilirsiniz:


SendMessage WinApi aracılığıyla bu menüyü programlı olarak çağırmayı deneyin.

 
Sergey Dzyublik :

2. görevin bağlam menüsünü çağırmak için bir Mesaj günlüğü yazarsanız, aşağıdaki sonucu alabilirsiniz:

SendMessage WinApi aracılığıyla bu menüyü programlı olarak çağırmayı deneyin.

işe yaramadı

 #include <WinAPI\winuser.mqh>

#define GA_ROOT           0x00000002

#define GET_HANDLE                                                                       \
   long Handle = user32::GetAncestor(:: ChartGetInteger ( 0 , CHART_WINDOW_HANDLE ), GA_ROOT); \
                                                                                         \
   for ( int i = 0 ; i < sizeof (ControlID) / sizeof ( int ); i++)                              \
    Handle = user32::GetDlgItem(Handle, ControlID[i]);

void OnStart ()
{
   static const int ControlID[] = {}; // Пробовал углубляться по дереву окон - не помогает.
  GET_HANDLE
  
  user32::SendMessageW(Handle, 0x10C1 , 0 , 0 );
}
 
fxsaber :

işe yaramadı

Büyük olasılıkla yanlış tutamacı kullanıyorsunuz.
Grafikler MDIClient nesnesi içinde uygulanır, kök terminal.exe penceresine gitmeniz ve ardından pencerelerden seçilen "SysListView32"ye gitmeniz ve tutamacını kullanmanız gerekir.
Belki daha basit bir şey, deneyin ...


 
Sergey Dzyublik :

Büyük olasılıkla yanlış tutamacı kullanıyorsunuz.
Grafikler MDIClient nesnesi içinde uygulanır, kök terminal.exe penceresine gitmeniz ve ardından pencerelerden seçilen "SysListView32"ye gitmeniz ve tutamacını kullanmanız gerekir.
Belki daha basit bir şey vardır, deneyin ...

Kolu aldım, yardımcı olmadı.

 #include <WinAPI\winuser.mqh>

#define GA_ROOT           0x00000002

#define GET_HANDLE                                                                       \
   long Handle = user32::GetAncestor(:: ChartGetInteger ( 0 , CHART_WINDOW_HANDLE ), GA_ROOT); \
                                                                                         \
   for ( int i = 0 ; i < sizeof (ControlID) / sizeof ( int ); i++)                              \
    Handle = user32::GetDlgItem(Handle, ControlID[i]);

void OnStart ()
{
   static const int ControlID[] = { 0xE81E , 0x804E , 0x28EF , 0x28FE };
  GET_HANDLE
  
   Print (Handle); // Распечатал хендл.
  
  user32::SendMessageW(Handle, 0x10C1 , 0 , 0 );
}


Büyük olasılıkla, Mesaj farklıdır.

 

Uzun zamandır soru, düşünce trenini doğru şekilde nasıl motive edeceğimiz konusunda eziyet ediyor.

if (değer[0] > değer[1]

ya da tam tersi

önce sıfır, sonra bir sonraki?

 

Merhaba! Lütfen bana terminalin neden VMware x64'te böyle davrandığını söyleyebilir misiniz?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Gudgeon , 2019.07.31 12:16

2019.07.31 08:20:46.595 Terminal MetaTrader 5 x64 build 2085 başladı (MetaQuotes Software Corp.)
2019.07.31 08:20:46.596 VMware x64 , IE 11, UAC, Intel Core i5-3450 @ 3.10GHz üzerinde Windows 10 Terminali (derleme 14393), Bellek: 2728 / 4095 Mb, Disk: 69 / 99 Gb, GMT+3
2019.07.31 08:20:46.596 Terminal C:\PROGI\MT-5


Terminale grafik nesneler yüklendiğinde daha sık oluyor gibi görünüyor.

örneğin: ticaret işlemleri , takvim etkinlikleri

Arıza sonrası gösterge

Bir süre sonra gösterge düzgün çalışmayı durdurur:

- program M1;

- herhangi bir gösterge (şekilde standart Hareketli Ortalama);

- üç makinede test edildi.

Grafiğin periyodunu değiştirirseniz - her şey yerine oturur.

Danışmanda grafik göstergelerden gelen sinyalleri kullandığım için bu benim için çok önemli.

 
Gudgeon :

Merhaba! Lütfen bana terminalin neden böyle davrandığını söyleyebilir misiniz?


Bir süre sonra gösterge düzgün çalışmayı durdurur:

- program M1;

- herhangi bir gösterge (şekil standart Hareketli Ortalamayı gösterir);

- üç makinede test edildi.

Grafiğin periyodunu değiştirirseniz - her şey yerine oturur.

Danışmanda grafik göstergelerden gelen sinyalleri kullandığım için bu benim için çok önemli.

Aşağıdaki verileri belirtin:

"Günlük" sekmesinden üç satırı kopyalayın (üç satır seçin -> sağ fare tıklaması -> Kopyala)


ve mesaja yapıştırın. Şu şekilde ortaya çıkmalı:

 2019.07 . 31 11 : 53 : 10.681 MetaTrader 5 x64 build 2093 started (MetaQuotes Software Corp.)
2019.07 . 31 11 : 53 : 10.685 Windows 10 (build 18362 ) x64, IE 11 , UAC, Intel Core i3- 3120 M  @ 2.50 GHz, Memory: 3188 / 8077 Mb, Disk: 99 / 415 Gb, GMT+ 2
2019.07 . 31 11 : 53 : 10.685 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
 

2019.07.31 08:20:46.595 Terminal MetaTrader 5 x64 build 2085 başladı (MetaQuotes Software Corp.)
2019.07.31 08:20:46.596 VMware x64, IE 11, UAC, Intel Core i5-3450 @ 3.10GHz üzerinde Windows 10 Terminali (derleme 14393), Bellek: 2728 / 4095 Mb, Disk: 69 / 99 Gb, GMT+3
2019.07.31 08:20:46.596 Terminal C:\PROGI\MT-5


Terminale grafik nesneler yüklendiğinde daha sık oluyor gibi görünüyor.

örneğin: alım satım işlemleri , takvim etkinlikleri ve küçük zaman dilimlerinde
 
fxsaber :

Kolu aldım, yardımcı olmadı.
Büyük olasılıkla, Mesaj farklıdır.

WM_CONTEXTMENU kullanılarak başarılı oldu.
Kodu biraz değiştirdik, hata ayıklamak daha kolay ve yeniden kullanılabilir:

 #include <WinAPI\winuser.mqh>

#define GA_ROOT             0x00000002
#define WM_CONTEXTMENU     0x007B


#define PRINT(x) ; Print ( #x, ":" , string (x))
#define PRINT64(x) ; printf ( "%s%s%#.08x" , #x, ":" , x)


long GetHandle( long handle, int &controls[]){
   long next_handle = handle;                                                                        
   for ( int i = 0 ; i < ArraySize (controls); i++){
      next_handle = user32::GetDlgItem(next_handle, controls[i]);
      PRINT64(next_handle);
   }           
   return next_handle;                
}
  

void OnStart (){
   long RootHandle = user32::GetAncestor(:: ChartGetInteger ( 0 , CHART_WINDOW_HANDLE ), GA_ROOT);
  PRINT64(RootHandle);  
  
   int controls[] = { 0xE81E , 0x804E , 0x28EF , 0x28FE }; 
   long handle = GetHandle(RootHandle, controls);
  PRINT64(handle);
  
  
   //PRINT(user32::SendMessageW(handle, WM_CONTEXTMENU, 0, -1));
  PRINT(user32::PostMessageW(handle, WM_CONTEXTMENU, 0 , - 1 ));
  PRINT( "Sleep" );

   Sleep ( 10 * 1000 );
}