Hatalar, hatalar, sorular - sayfa 2523

 
Sergey Dzyublik :

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

Teşekkürler, menü belirir!

Bir menü öğesinin nasıl seçileceğini kafamı kırdı. Mümkün olan her şekilde içilir WM_ENTERIDLE ve MN_GETHMENU, bırakmaz.

Belirli bir menü öğesinin seçiminin kendisi bir tür dahili MT5 komutu değil mi?


Tehdit Bu seçenek işe yaramadı

   const long hwnd = GetMenu(handle);
  PRINT64(hwnd);
  PRINT64(user32::SendMessageW(hwnd, WM_KEYDOWN, VK_DOWN, 0 ));
 
fxsaber :

Belirli bir menü öğesinin seçimi bir tür dahili MT5 komutu değil mi?

evet, başlangıçtaki ipucu buydu. ancak dahili komutlar kayıt mesajı olmadan çalışmıyor gibi görünüyor
 
TheXpert :
evet, başlangıçtaki ipucu buydu. ancak dahili komutlar kayıt mesajı olmadan çalışmıyor gibi görünüyor

Herkes MT4'e nasıl kayıt olunacağını bilir. Ama MT5...

 
fxsaber :

Herkes MT4'e nasıl kayıt olunacağını bilir. Ama MT5...

Evet.
 
Bu kaynaktaki fikirleri kullanmaya çalıştım, yine olmadı !
   string nullstring;
   const long hpopup=FindWindowW( "#32768" , nullstring);

#define MN_GETHMENU     0x01E1   
   const long hmenu = SendMessageW(hpopup, MN_GETHMENU, 0 , 0 );
  
   uint id=GetMenuItemID(hmenu, 0 );
#define WM_COMMAND                     0x0111
  SendMessageW(RootHandle,WM_COMMAND,id, 0 );
 
fxsaber :
Bu kaynaktaki fikirleri kullanmaya çalıştım, yine olmadı !


 #include <WinAPI\winuser.mqh>

#define GA_ROOT             0x00000002
#define WM_CONTEXTMENU     0x007B
#define MN_GETHMENU         0x01E1

#define TVM_GETITEM                  0x110C
#define TVM_GETNEXTITEM              0x110A


#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 );
   long hwnd = FindWindowW( "#32768" , "" );
  PRINT64(hwnd);
  
   long menu_handle = SendMessageW(hwnd, MN_GETHMENU, 0 , 0 );
  PRINT(IsMenu(menu_handle));
  PRINT(GetMenuItemCount(menu_handle));
    
   long sub_menu_handle = GetSubMenu(menu_handle, 1 );   // 9
  PRINT(GetMenuItemCount(sub_menu_handle));            // 1
}
 
fxsaber :
Bu kaynaktaki fikirleri kullanmaya çalıştım, yine olmadı !

Klavye oklarına basmayı ve menüdeki fareyi tıklamayı simüle etmek gerekli gibi görünüyor:

 #define WM_KEYDOWN                     0x0100
#define WM_KEYUP                       0x0101
#define WM_LBUTTONDOWN                 0x0201
#define WM_LBUTTONUP                   0x0202
#define VK_UP                           0x26
#define VK_DOWN                         0x28


//перемещение по меню (сколько пунктов, столько раз)
PostMessageW(handle, WM_KEYDOWN, VK_DOWN, 0 );
PostMessageW(handle, WM_KEYUP, VK_DOWN, 0 );

//нажатие пункта
SendMessageW(handle,WM_LBUTTONDOWN, 0 , 0 ); 
SendMessageW(handle,WM_LBUTTONUP, 0 , 0 );
 
Sergey Dzyublik :

Teşekkürler, anladım. Buradan aldığım menuspy programı çok yardımcı oldu.

Drafts by kero
  • wasm.in
(NB: некоторые порой потребуется запускать as admin, а то и as system) -WinDrag Однажды наткнулся на австралийский "The Customiser" by Wanga...
[Silindi]  
Alexey Navoykov :

Belirli bir cümleye cevap veriyordum. Boşver. Kediotu içip yat, endişelenmen senin için kötü. ... Ama bazı insanlar için "C ++" kelimesinde yanar )

Ve anlamadıysan sadece sana cevap vermedim ve ifaden çok açıklayıcı çıktı ... Endişelenmek benim için zararlı, katılımın olmadan kendim karar vereceğim. O yüzden kaba olma ve biraz kediotu iç, söyleyeceğim şey hoşuna gitmeyecek.

MQL v С++ arasındaki farklarla ilgilenen, öfkelenen, kafası karışan herkes - ayrı bir konu oluşturun ve tüm bunları iyi niyetle tartışın. Ya da bana yardım et?

 
Mola verin , ateşli Finliler.