Как программно нажать на кнопку Авто-торговля

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladislav Andruschenko
164552
Vladislav Andruschenko  

Как программно нажать на кнопку Авто-торговля

Привет друзья,

В мкл4 я думаю данной фишкой пользовались все - когда нужно отключить все советники на счете в один миг - и включить например когда произойдет событие(зацикленный вариант)

все просто

#import "user32.dll"
int GetAncestor(int hWnd,int gaFlags);
#import

#define  PUSKSTOP 33020
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void startdestroy(bool fals=true)
  {
   int hChart=WindowHandle(Symbol(),Period());
   int hMetaTrader=GetAncestor(hChart,2);
   if(fals==true)
     {
      if(!IsExpertEnabled())PostMessageA(hMetaTrader,WM_COMMAND,PUSKSTOP,0);  // пуск или остановка советника

     }
   if(fals==false)
     {
      if(IsExpertEnabled())PostMessageA(hMetaTrader,WM_COMMAND,PUSKSTOP,0);  // пуск или остановка советника

     }

  }

 

 Как это сделать в мт5? Никто не пробовал?(не имею ввиду перевести данный код, а именно команду 33020 чем заменить?)

---
22811
---  
Vladon:

 Как это сделать в мт5? Никто не пробовал?(не имею ввиду перевести данный код, а именно команду 33020 чем заменить?)

Spy++ в помощь. неужели так сложно нажать и посмотреть. делов на две минуты.
Vladislav Andruschenko
164552
Vladislav Andruschenko  
sergeev:
Spy++ в помощь. неужели так сложно нажать и посмотреть. делов на две минуты.

спасибо я просто другой программой мониторил ни как не мог найти. 

Попробую разобраться  

Vladislav Andruschenko
164552
Vladislav Andruschenko  

Вроде все сделал правильно - но сообщения потоков не пишутся. пустое окно и все.

 Хендл рабочей области выбрал, запустил логи - но они не появляются.

что я не так делаю?  

Файлы:
31803.png 29 kb
MetaQuotes
Админ
27509
Renat Fatkhullin  
Vladon:

Вроде все сделал правильно - но сообщения потоков не пишутся. пустое окно и все.

 Хендл рабочей области выбрал, запустил логи - но они не появляются.

что я не так делаю?  

В 32 битной среде запустите или найдите 64 битный анализатор.
Vladislav Andruschenko
164552
Vladislav Andruschenko  
Спасибо. 
Vladislav Andruschenko
164552
Vladislav Andruschenko  

Написал функцию, нашел код кнопки, но не нажимается и все тут :-)


#import "user32.dll"
int GetAncestor(int hWnd,int gaFlags);
int      PostMessageA(int hWnd,int Msg,int wParam,int lParam);

#import

#define  PUSKSTOP 32851
#define WM_COMMAND                     0x0111
#define WM_HOTKEY                      0x0312
#define ID_REFRESH_NAVIGATOR    0x8288
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void startdestroy(bool fals=true)
  {
   int hChart=WindowHandle(Symbol(),Period());
   int hMetaTrader=GetAncestor(hChart,2);
   if(fals==true)
     {
      if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))PostMessageA(hMetaTrader,WM_COMMAND,PUSKSTOP,0);  // пуск или остановка советника

     }
   if(fals==false)
     {
      if(AccountInfoInteger(ACCOUNT_TRADE_EXPERT))PostMessageA(hMetaTrader,WM_COMMAND,PUSKSTOP,0);  // пуск или остановка советника

     }

  }
  
int WindowHandle(string symbol,
                     int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break;
      if(ChartSymbol(currChart)==symbol
         && ChartPeriod(currChart)==timeframe)
         return((int)currChart);
      prevChart=currChart;
      i++;
     }
   return(0);
  }  
Vladislav Andruschenko
164552
Vladislav Andruschenko  

искал сообщение WM_COMMAND

<000001> 000108A6 S WM_COMMAND wNotifyCode:0000 wID:32851 hwndCtl:000108AE
<000002> 000108A6 R WM_COMMAND
<000003> 000108A6 S WM_COMMAND wNotifyCode:0000 wID:32851 hwndCtl:000108AE
<000004> 000108A6 R WM_COMMAND
<000005> 000108A6 S WM_COMMAND wNotifyCode:1 (sent from an accelerator) wID:32846
<000006> 000108A6 R WM_COMMAND
<000007> 000108A6 S WM_COMMAND wNotifyCode:1 (sent from an accelerator) wID:32846
<000008> 000108A6 R WM_COMMAND
<000009> 000108A6 S WM_COMMAND wNotifyCode:1 (sent from an accelerator) wID:32845
<000010> 000108A6 R WM_COMMAND
<000011> 000108A6 P WM_COMMAND wNotifyCode:0 (sent from a menu) wID:50021
<000012> 000108A6 S WM_COMMAND wNotifyCode:0000 wID:32851 hwndCtl:000108AE
<000013> 000108A6 R WM_COMMAND
<000014> 000108A6 S WM_COMMAND wNotifyCode:0000 wID:32851 hwndCtl:000108AE
<000015> 000108A6 R WM_COMMAND
<000016> 000108A6 S WM_COMMAND wNotifyCode:1 (sent from an accelerator) wID:32851
<000017> 000108A6 R WM_COMMAND
<000018> 000108A6 S WM_COMMAND wNotifyCode:0000 wID:32851 hwndCtl:000108AE
<000019> 000108A6 R WM_COMMAND
---
22811
---  
почему
PostMessageA ?
Vladislav Andruschenko
164552
Vladislav Andruschenko  
а нужно в Юникоде делать? 
Vladislav Andruschenko
164552
Vladislav Andruschenko  
хоть W хоть A - не работает кнопка. 
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий