Erreurs, bugs, questions - page 2523

 
fxsaber:

La sélection d'un élément de menu particulier n'est-elle pas une sorte de commande interne de MT5 ?

Oui, c'est ce qui a été suggéré au début. mais les commandes internes ne semblent pas fonctionner sans registermessage
 
TheXpert:
Oui, c'est ce qui a été suggéré au début. mais les commandes internes ne semblent pas fonctionner sans registermessage

Tout le monde sait comment faire le registre pour MT4. Mais MT5...

 
fxsaber:

Tout le monde sait comment faire le registre pour MT4. Mais MT5...

Oui.
 
J'ai essayé d'utiliser les idées de ce livre de référence, mais là encore , ça n'a pas marché !
  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:
J'ai essayé d'utiliser les idées de ce livre de référence, mais là encore , ça n'a pas marché !


#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:
J'ai essayé d'utiliser les idées de ce code source, mais cela n'a toujours pas fonctionné !

Il semble simuler le fait d'appuyer sur les flèches du clavier et de cliquer sur le menu :

#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:

Merci, j'ai compris. Le programme de menuspy que j'ai pris ici a été très utile.

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

Je répondais à une phrase spécifique. Calme-toi. Prends de la valériane et va te coucher, ce n'est pas bon pour toi de t'inquiéter. ...Certaines personnes s'enflamment lorsqu'elles entendent le mot "C++".

Je ne répondais pas seulement à vous, si vous ne comprenez pas, et votre phrase est assez révélatrice... Que je sois inquiet ou non, je le déciderai moi-même, sans votre participation. Alors ne soyez pas grossier et buvez de la valériane, vous n'aimerez pas ce que j'ai à dire.

Tous ceux qui sont intéressés, indignés, perplexes par les différences entre MQL et C++ - créez un sujet séparé et discutez-en à part. Ou puis-je aider ?

 
Pause, les gars finlandais sexy.
 
C'est exactement la raison pour laquelle le forum a besoin d'un modérateur qui soit un programmeur professionnel.