EXP_Relogin

Miscellaneous
It issuies visual alerts to the screen
1 Views
0 Downloads
0 Favorites
EXP_Relogin
#import "user32.dll"
  int SendMessageA( int hWnd, int Msg, int wParam, int lParam );
  int PostMessageA( int hWnd, int Msg, int wParam, int lParam );
  int GetAncestor( int hwnd, int gaFlags );
  int GetLastActivePopup( int hWnd );
  int GetDlgItem( int hDlg, int nIDDlgItem );

  int CharPrevA( string lpszStart, string lpszCurrent ); // èñïîëüçóåì äëÿ ïîëó÷åíèÿ àäðåñà ñòðîêè
  int CharPrevW( int lpszStart[], int lpszCurrent[] );   // èñïîëüçóåì äëÿ ïîëó÷åíèÿ àäðåñà ìàññèâà öåëûõ ÷èñåë
#import

#define TVM_GETNEXTITEM    4362
#define TVM_SELECTITEM     4363
#define TVM_GETITEM        4364
#define TVGN_ROOT          0
#define TVGN_NEXT          1
#define TVGN_CHILD         4
#define TVGN_CARET         9
#define TVIF_TEXT          1

#define LVM_GETITEMCOUNT   4100
#define LVM_GETITEMTEXT    4141

#define BM_CLICK           0x00F5

#define WM_COMMAND         0x0111

#define PAUSE              500

extern string AlertString = "cannot login [No connection]";
extern int CheckInterval = 60;

string textbuffer="Àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÀáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ";

int GetJournal( int EndTime, string& StrList[] )
{
  int LVITEM[10];
  int LVITEM_address = CharPrevW(LVITEM, LVITEM); // ïîëó÷àåì àäðåñ ìàññèâà
  LVITEM[5] = CharPrevA(textbuffer, textbuffer); // ïîëó÷àåì àäðåñ òåêñòîâîãî áóôåðà
  LVITEM[6] = 255; // textmask
  int hListView = GetAncestor(WindowHandle(Symbol(), Period()), 3);

  hListView = GetDlgItem(hListView, 0xE81E);
  hListView = GetDlgItem(hListView, 0x51);
  hListView = GetDlgItem(hListView, 0x81B9);

  int ItemsCount = SendMessageA(hListView, LVM_GETITEMCOUNT, 0, 0);

  ArrayResize(StrList, ItemsCount);

  for (int i = 0; i < ItemsCount; i++)
  {
    LVITEM[2] = 0; // subitem

    if (SendMessageA(hListView, LVM_GETITEMTEXT, i, LVITEM_address) == 0)
      continue;

    if (StrToTime(textbuffer) <= EndTime)
    {
      ArrayResize(StrList, i);

      break;
    }

    StrList[i] = textbuffer + " ";

    LVITEM[2] = 1; // subitem

    if (SendMessageA(hListView, LVM_GETITEMTEXT, i, LVITEM_address) == 0)
      continue;

    StrList[i] = StrList[i] + textbuffer;
  }

  return(i);
}

bool SelectAccount( int hTreeView, string Account )
{
  int TVITEM[10];
  int TVITEM_address = CharPrevW(TVITEM, TVITEM);  // ïîëó÷àåì àäðåñ ìàññèâà    // Dll_GetAddressOfInteger(TVITEM);
  int textbuffer_address = CharPrevA(textbuffer, textbuffer); // ïîëó÷àåì àäðåñ òåêñòîâîãî áóôåðà  // Dll_GetAddressOfString(textbuffer);
  int hRoot = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_ROOT, 0);
  int hGroup = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, hRoot);
  int hAccount = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, hGroup);

  TVITEM[0] = TVIF_TEXT;
  TVITEM[4] = textbuffer_address;
  TVITEM[5] = 255;

  while (hGroup > 0)
  {
    if (hAccount == 0)
    {
      hGroup = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, hGroup);
      hAccount = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_CHILD, hGroup);

      continue;
    }

    TVITEM[1] = hAccount;

    SendMessageA(hTreeView, TVM_GETITEM, 0, TVITEM_address);

    if (textbuffer == Account)
      break;

    hAccount = SendMessageA(hTreeView, TVM_GETNEXTITEM, TVGN_NEXT, hAccount);
  }

  if (hGroup == 0)
    return(FALSE);

  SendMessageA(hTreeView, TVM_SELECTITEM, TVGN_CARET, hAccount);

  return(TRUE);
}

void Login()
{
  int hwnd = GetAncestor(WindowHandle(Symbol(), Period()), 3);
  int hTreeView = GetDlgItem(hwnd, 0xE81C);

  hTreeView = GetDlgItem(hTreeView, 0x52);
  hTreeView = GetDlgItem(hTreeView, 0x8A6F);

  if (!SelectAccount(hTreeView, AccountNumber() + ": " + AccountName()))
    return;

  PostMessageA(hwnd, WM_COMMAND, 0x80EA, 0);

  Sleep(PAUSE);

  hwnd = GetLastActivePopup(hwnd);
  hwnd = GetDlgItem(hwnd, 1);

  PostMessageA(hwnd, BM_CLICK, 0, 0);

  return;
}

void init()
{
  string Journal[];
  int Size, Pause;

  int PrevTime = TimeLocal();

  while (!IsStopped())
  {
    Comment(WindowExpertName() + ": check the log ..." +
            "\nAlertString = " + AlertString);

    Size = GetJournal(PrevTime, Journal);

    if (Size > 0)
      PrevTime = StrToTime(StringSubstr(Journal[0], 0, 19));

    for (int i = 0; i < Size; i++)
      if (StringFind(Journal[i], AlertString) >= 0)
      {
        Alert(WindowExpertName() + ": from the log - " + Journal[i]);
        Alert(WindowExpertName() + ": Relogin...");

        Login();

        PrevTime = TimeLocal();

        break;
      }

    Pause = CheckInterval * 1000;

    while (Pause > 0)
    {
      Comment(WindowExpertName() + ": to check the log still have " + DoubleToStr(Pause / 1000, 0) + " s." +
              "\nAlertString = " + AlertString);

      Sleep(PAUSE);

      Pause -= PAUSE;
    }
  }

  return;
}

void start()
{
  return;
}

Comments