Errores, fallos, preguntas - página 2523

 
Sergey Dzyublik:

Funcionó con WM_CONTEXTMENU.
Se ha modificado ligeramente el código, es más fácil de depurar y se puede reutilizar:

Gracias, ¡el menú aparece!

No sé cómo seleccionar un elemento del menú. Probado todo tipo de WM_ENTERIDLE y MN_GETHMENU, no funciona.

¿No es la selección de un determinado elemento del menú un comando interno de MT5?


ZZY Esta opción no ha funcionado.

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

¿No es la selección de un elemento del menú en sí mismo una especie de comando interno de MT5?

Sí, eso es lo que se insinuó al principio. pero los comandos internos no parecen funcionar sin registermessage
 
TheXpert:
Sí, eso es lo que se insinuó al principio. pero los comandos internos no parecen funcionar sin registermessage

Todo el mundo sabe cómo hacer el Registro para MT4. Pero MT5...

 
fxsaber:

Todo el mundo sabe cómo hacer el Registro para MT4. Pero MT5...

Sí.
 
Intenté utilizar las ideas de este libro de consulta, pero tampoco funcionó.
  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:
Intenté utilizar las ideas de este libro de consulta, pero tampoco funcionó.


#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:
Intenté usar las ideas de este código fuente, ¡fracasé de nuevo !

Parece simular la pulsación de las flechas del teclado y el clic en el menú:

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

Gracias, lo tengo. El programa de menuspy que recogí aquí fue muy útil.

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

Respondía a una frase concreta. Cálmate. Toma un poco de valeriana y vete a la cama, no es bueno que te preocupes. ...Algunas personas se calientan cuando escuchan la palabra "C++".

No te estaba contestando sólo a ti, si no lo entiendes, y tu frase es bastante reveladora... Si estoy preocupado o no, lo decidiré yo mismo, sin tu participación. Así que no seas maleducado y toma un poco de valeriana, no te va a gustar lo que tengo que decir.

Todos los que estén interesados, indignados, perplejos por las diferencias entre MQL y C++ - creen un tema aparte y discútanlo allí por su cuenta. ¿O puedo ayudar?

 
Romper, los chicos finlandeses calientes.