Erros, bugs, perguntas - página 2523

 
Sergey Dzyublik:

Funcionou com a WM_CONTEXTMENU.
Ligeiramente afinado o código, é mais fácil de depurar e pode ser reutilizado:

Obrigado, o menu aparece!

Perplexo sobre como seleccionar um item do menu. Tentou WM_ENTERIDLE e MN_GETHMENU, sem sorte.

A selecção de um determinado item do menu não é por si só um comando MT5 interno?


ZZY Esta opção não funcionou.

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

Não será a selecção de um determinado item do menu em si uma espécie de comando MT5 interno?

Sim, foi isso que foi sugerido no início. mas os comandos internos não parecem funcionar sem mensagem de registo
 
TheXpert:
Sim, foi isso que foi sugerido no início. mas os comandos internos não parecem funcionar sem mensagem de registo

Todos sabem como fazer Registe-se no MT4. Mas MT5...

 
fxsaber:

Todos sabem como fazer Registe-se no MT4. Mas MT5...

Sim.
 
Tentei usar as ideias deste livro fonte, mais uma vez não funcionou!
  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:
Tentei usar as ideias deste livro fonte, mais uma vez não funcionou!


#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:
Tentei usar as ideias deste código fonte, mais uma vez não funcionou!

Parece simular o premir das setas do teclado e clicar no 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:

Obrigado, já o tenho. O programa de menuspia que aqui peguei foi muito útil.

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

Eu estava a responder a uma frase específica. Acalme-se. Tome um pouco de valeriana e vá para a cama, não é bom para si preocupar-se. ...Algumas pessoas ficam quentes quando ouvem a palavra "C++".

Eu não estava apenas a responder-lhe, se não o receber, e a sua frase é bastante reveladora... Quer esteja ou não preocupado, eu próprio decidirei, sem a vossa participação. Portanto, não seja rude e beba um pouco de valeriana, não vai gostar do que eu tenho a dizer.

Todos os que estão interessados, indignados, perplexos com as diferenças em MQL vs C++ - criem um tópico à parte e discutam tudo lá por vossa conta. Ou posso ajudar?

 
Intervalo, os tipos finlandeses quentes.