//+------------------------------------------------------------------+
//|                                                  s-ReConnect.mq4 |
//|                                          Copyright © 2009, Talex |
//|                                      talex.kaliningrad@gmail.com |
//+------------------------------------------------------------------+
//
// ВНИМАНИЕ!!!
// Переподключаемый счет должен быть в окне "Избранное", самым верхним
#property copyright "Copyright © 2009, Talex"
#property link      "talex.kaliningrad@gmail.com"
#import "user32.dll"
   int GetAncestor (int hWnd, int gaFlags);
   int GetDlgItem (int hDlg, int nIDDlgItem);
   int GetLastActivePopup (int hWndOwner);
   int PostMessageA (int hWnd, int Msg, int wParam, int lParam);
#import
#define WM_COMMAND         0x0111
#define WM_KEYDOWN         0x0100
#define VK_HOME            0x24
#define VK_ENTER           0x0D

int Pause=15000;                                    // пауза 15 секунд
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
   bool flag=true;
//------------------------------------
   while(!IsStopped()) {
      Comment("ReConnect");
      if(!flag) {
         Print("Соединение восстановлено. Время ДЦ: ",TimeToStr(TimeCurrent()));
         Comment("ReConnect\nСоединение восстановлено.\nВремя ДЦ: ",TimeToStr(TimeCurrent()));
         flag=true;
      }
      while(!IsConnected()&&!IsStopped()) {         // если соединения нет
         if(flag) {
            Print("Нет соединения с сервером. Время ДЦ: ",TimeToStr(TimeCurrent()));
            Comment("ReConnect\nНет соединения с сервером.\nВремя ДЦ: ",TimeToStr(TimeCurrent()));
            flag=false;
         }
         Rescan();                                  // пересканируем серверы
         Sleep(Pause);                              // подождем коннекта
         if(!IsConnected()) {                       // если соединения нет
            Reconnect();                            // переподключаем счет
            Sleep(Pause);                           // подождем коннекта
         }
      }
      Sleep(60000);
   }
   Comment("");
   return;
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------------+
// Функция позволяет пересканировать серверы                             +
//-----------------------------------------------------------------------+
void Rescan() {
   int hwindow=GetAncestor(WindowHandle(Symbol(),Period()),2);// получаем хендл главного окна
//-----------------------------------
   Comment("ReConnect\n...пересканируем серверы");
	if(hwindow!=0) {                                 // нашли главное окно
	   PostMessageA(hwindow,WM_COMMAND,37400,0);     // посылаем сообщение "пересканировать серверы" 
	}
	else Print("Rescan Error:",GetLastError());
	return;
}
//-----------------------------------------------------------------------+
//-----------------------------------------------------------------------+
// Функция позволяет переподключиться к счету                            +
//-----------------------------------------------------------------------+
void Reconnect() {
   int hwindow=WindowHandle(Symbol(),Period()),     // получаем хендл окна графика
       hterminal=GetAncestor(hwindow,2);            // получаем хендл главного окна
//---------------------------- 
   Comment("ReConnect\n...переподключаем аккаунт");
   if(hterminal!=0) {                               // нашли главное окно
      hwindow=GetDlgItem(hterminal,0xE81C);
      hwindow=GetDlgItem(hwindow,0x52);
      hwindow=GetDlgItem(hwindow,0x8A70);           // нашли Избранное окна Навигатор
      PostMessageA(hwindow,WM_KEYDOWN,VK_HOME,0);   // верхняя строчка закладки Избранное окна Навигатор
      PostMessageA(hwindow,WM_KEYDOWN,VK_ENTER,0);  // нажали логин
      Sleep(1000);                                  // выждали
      hwindow=GetLastActivePopup(hterminal);        // нашли форму логина
      PostMessageA(hwindow,WM_KEYDOWN,VK_ENTER,0);  // залогинились
   }
   else Print("Reconnect Error:",GetLastError());
   return;
}
//-----------------------------------------------------------------------+