[ESCAPE_CHAR]
^
[END]

[APPEARANCE]
COLOR = 30, 80, 255;
SIZE_X = 10;
SIZE_Y =6;
[END]

[INTERFACE]
DIALOG, "Поиск findheapcolor", 703, 588;
STATIC, "Поиск в", 4, 4, 44, 20;
COMBO, "Активный по Экрану""Активный по Указателю""Фоновый по Указателю""Активный по Скриншоту""Фоновый по Скриншоту", 52, 4, 160, 100, int EW;
STATIC, "Указатель на окно", 220, 4, 100, 20;
EDIT, 324, 4, 140, 20, win W;
STATIC, "Указатель на скрин", 488, 4, 104, 20;
EDIT, 596, 4, 96, 20, int Screen;
STATIC, "Пауза до:", 4, 28, 52, 20;
EDIT, 60, 28, 100, 20, int P1;
STATIC, "Время ожидания", 4, 52, 92, 20;
EDIT, 100, 52, 100, 20, int T;
STATIC, "Цвета (через запятую)", 4, 76, 120, 20;
EDIT, 128, 76, 564, 20, int D_Color;
STATIC, "Количество (через запятую)", 4, 100, 152, 20;
EDIT, 160, 100, 532, 20, int D_Kol;
STATIC, "Сколько надо одновременно найти цветов для нахождения объекта", 4, 124, 356, 20;
EDIT, 364, 124, 100, 20, int Kol_Col;
STATIC, "Размер Области нахождения X", 4, 148, 164, 20;
EDIT, 172, 148, 76, 20, int Obl_N_X;
STATIC, "Размер Области нахождения Y", 288, 148, 164, 20;
EDIT, 456, 148, 76, 20, int Obl_N_Y;
STATIC, "Размер всего объекта где больше не нахдить X", 4, 172, 248, 20;
EDIT, 256, 172, 76, 20, int Obl_O_X;
STATIC, "Размер всего объекта где больше не нахдить Y", 364, 172, 248, 20;
EDIT, 616, 172, 76, 20, int Obl_O_Y;
STATIC, "Зона поиска старт", 4, 196, 100, 20;
EDIT, 108, 196, 100, 20, int eX1;
EDIT, 212, 196, 100, 20, int eY1;
STATIC, "Зона поиска финиш", 384, 196, 100, 20;
EDIT, 488, 196, 100, 20, int eX2;
EDIT, 592, 196, 100, 20, int eY2;
CHECK, "Игнорировать зоны (построчно через запятую)", 4, 220, 264, 20, int Ignor;
EDIT_MULTILINE, 272, 220, 420, 72, string Mas_Ignor;
STATIC, "Разбежность оттенков", 4, 296, 124, 20;
EDIT, 132, 296, 64, 20, int R;
STATIC, "Сколько искать. Или -1", 4, 320, 124, 20;
EDIT, 132, 320, 52, 20, int Kol;
CHECK, "Сортировать по удаленности от X", 224, 320, 196, 20, int Sort;
EDIT, 424, 320, 100, 20, int SortX;
STATIC, "Y", 540, 320, 12, 20;
EDIT, 556, 320, 100, 20, int SortY;
STATIC, "Переменные:  Количество", 4, 344, 140, 20;
EDIT, 148, 344, 60, 20, int K;
STATIC, "Массив X", 220, 344, 52, 20;
EDIT, 276, 344, 72, 20, int X;
STATIC, "Массив Y", 360, 344, 52, 20;
EDIT, 416, 344, 72, 20, int Y;
STATIC, "Заполнять массив с индекса", 500, 344, 152, 20;
EDIT, 656, 344, 36, 20, int I;
STATIC, "Пауза после нахождения", 4, 368, 132, 20;
EDIT, 140, 368, 100, 20, int P2;
STATIC, "Действие если нашли", 4, 392, 120, 20;
COMBO, "Левую клик""Среднюю клик""Правую клик""Левую нажать""Среднюю нажать""Правую нажать""Левую отпустить""Среднюю отпустить""Правую отпустить""Левая двойной клик""Средняя двойной клик""Правая двойной клик""Переместить""Бездействие", 128, 392, 224, 116, string M;
STATIC, "Смещение клика  X", 368, 392, 100, 20;
EDIT, 472, 392, 80, 20, int SmX;
STATIC, "Y", 580, 392, 16, 20;
EDIT, 600, 392, 80, 20, int SmY;
STATIC, "Пауза после действия, если было", 4, 416, 176, 20;
EDIT, 184, 416, 100, 20, int P3;
CHECK, "Перенести мышь после действия и паузы (если было)  X", 4, 440, 316, 20, int Per_M;
EDIT, 324, 440, 100, 20, int Per_X;
STATIC, "Y", 436, 440, 12, 20;
EDIT, 452, 440, 100, 20, int Per_Y;
STATIC, "Ожидать исчезновение объекта после клика и паузы мсек:", 4, 464, 308, 20;
EDIT, 316, 464, 100, 20, int P4;
STATIC, "Повторить блок дополнительно, если объект не исчез после клика, паузы и ожидания, количество раз:", 4, 488, 536, 20;
EDIT, 548, 488, 88, 20, int POVTOR;
STATIC, "Комментарий", 4, 512, 76, 20;
EDIT, 84, 512, 608, 20, unknown Comment;
BUTTON_OK, "Принять", 488, 540, 100, 20;
BUTTON_CANCEL, "Закрыть", 592, 540, 100, 20;
[END]


[INFO]
[ENDL]>>M>>[ENDL]>>Comment
[END]


[ASSOC_NUMBER]
D_Color, D_Kol;
[END]

[ASSOC_VAR]
EW=0;
W=W_Kib;
Screen=Screen;
P1=0;
T=0;
D_Color = 0, 255;
D_Kol = 2, 1;
Kol_Col=2;
Obl_N_X=20;
Obl_N_Y=20;
Obl_O_X=50;
Obl_O_Y=50;
R=0;
Sort=0;
SortX=0;
SortY=0;
P2=0;
M="Бездействие";
SmX=0;
SmY=0;
P3=0;
P4=0;
POVTOR=0;
I=0;
Ignor=0;
Mas_Ignor="0, 0, 0, 0";
Kol = 1;
eX1=0;
eY1=0;
eX2=eX_Kib;
eY2=eY_Kib;
X = X_Kib;
Y = Y_Kib;
K = K_Kib;
Per_M=0;
Per_X=5;
Per_Y=5;
X_V = #~X~[~I~];
Y_V = #~Y~[~I~];
K_V = #~K~;
W_V = #~W~;
V_X=~W~.leftclient;
V_Y=~W~.topclient;
V_color = #Color~*~;
V_kol = #Kol~*~;
V_k_color = ~GET(amtelement(~D_Color~))~;
V_Screen=#~Screen~;
Comment=;
[END]

[GLOBAL_VAR]
win ~W~;
int ~Screen~[3000][3000];  
int ~K~, ~X~[1000], ~Y~[1000];  
int Color~*~[~GET(amtelement(~D_Color~))~] = {~D_Color~};
int Kol~*~[~GET(amtelement(~D_Kol~))~] = {~D_Kol~};
[END]

[EVENT]
IF (I_MODE_BIND_WINDOW!=0)SENDBUTTON(GETID(EW), S_MODE_BIND_WINDOW);
IF (I_MODE_BIND_WINDOW!=0)SENDEDIT(GETID(W), W_Kib);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(EW), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(W), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(Screen), 0);
IF (Ignor==1)ENABLE(GETID(Mas_Ignor), 1);
IF (Ignor==0)ENABLE(GETID(Mas_Ignor), 0);
IF (EW==0)ENABLE(GETID(W), 0);
IF (EW==0)ENABLE(GETID(Screen), 0);
IF (EW==1)ENABLE(GETID(W), 1);
IF (EW==1)ENABLE(GETID(Screen), 0);
IF (EW==2)ENABLE(GETID(W), 1);
IF (EW==2)ENABLE(GETID(Screen), 0);
IF (EW==3)ENABLE(GETID(W), 0);
IF (EW==3)ENABLE(GETID(Screen), 1);
IF (EW==4)ENABLE(GETID(W), 0);
IF (EW==4)ENABLE(GETID(Screen), 1);
[END]

[FUNCTION_BODY]
function(int ew, int #Scr, win #w, int v_x, int v_y, int Obl_n_x, int Obl_n_y, int Obl_o_x, int Obl_o_y, int #col, int #kol, int k_col, int kol_col, int k, int Sort, int sortx, int sorty, int #mK, int #mX, int #mY, int ex1, int ey1, int ex2, int ey2, int p1, int t, int r, int ignor, string mas_ignor, int p2, string m, int smx, int smy, int p3, int per_m, int per_x, int per_y, int p4, int povtor)
{
pause (p1);
int pvt=0;
int tsmx=smx, tsmy=smy;
S:;
if (t==0)goto d1r;
  looptime(t)
  {
  d1r:;
  if (ew==0)mK=findheapcolor(k, #col[0], #kol[0], k_col, kol_col, #mX[0], #mY[0], Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, -1);
  if (ew==1)mK=findheapcolor(k, #col[0], #kol[0], k_col, kol_col, #mX[0], #mY[0], Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, -1);
  if (ew==2)mK=findheapcolor(k, #col[0], #kol[0], k_col, kol_col, #mX[0], #mY[0], Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, w);
  if (ew==3 || ew==4)mK=findheapcolor(k, #col[0], #kol[0], k_col, kol_col, #mX[0], #mY[0], Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, #Scr[0][0]);
  if (mK>0 || t==0) break;
  sleep(5);
  }
if (mK<1) return mK;
if (ew==3 || ew==4){ex1=ex1+screenstartx(); ey1=ey1+screenstarty();}
  for (int n=0; n<mK; n++)
  {
  mX[n]=mX[n]+ex1;
  mY[n]=mY[n]+ey1;
  }
  if (ignor)
  {
  mas_ignor=mas_ignor+"^r^n";
  string P[4];
  int x1, y1, x2, y2;
    if (regexsearch(4, #P[0], mas_ignor, "[0-9]+(?=,|\r\n)")==4)
    {
    x1=formatsn(P[0]); y1=formatsn(P[1]); x2=formatsn(P[2]); y2=formatsn(P[3]);
      for (n=0; n<mK; n++)
      {
        if (mX[n]>x1 && mX[n]<x2 && mY[n]>y1 && mY[n]<y2)
        {
        mK--;
          for (int n1=n; n1<mK; n1++)
          {
          mX[n1]=mX[n1+1]; mY[n1]=mY[n1+1];
          }
        if (mK<1) return mK;
        n--;
        }
      }
      while (regexsearch(4, #P[0])==4)
      {
      x1=formatsn(P[0]); y1=formatsn(P[1]); x2=formatsn(P[2]); y2=formatsn(P[3]);
        for (n=0; n<mK; n++)
        {
          if (mX[n]>x1 && mX[n]<x2 && mY[n]>y1 && mY[n]<y2)
          {
          mK--;
            for (n1=n; n1<mK; n1++)
            {
            mX[n1]=mX[n1+1]; mY[n1]=mY[n1+1];
            }
          if (mK<1) return mK;
          n--;
          }
        }
      }
    }
  }
if (Sort) sort(sortx, sorty, #mX[0], #mY[0], mK);
pause (p2);
  if (ew==0 || ew==3 || ew==1)
  {
  if (ew==1){smx=v_x+smx; smy=v_y+smy;}
  if (m=="Левую клик"){mouse(LEFT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Среднюю клик"){mouse(MIDDLE, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Правую клик"){mouse(RIGHT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Левую нажать"){mousedown(LEFT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Среднюю нажать"){mousedown(MIDDLE, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Правую нажать"){mousedown(RIGHT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Левую отпустить"){mouseup(LEFT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Среднюю отпустить"){mouseup(MIDDLE, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Правую отпустить"){mouseup(RIGHT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Левая двойной клик"){mousedbl(LEFT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Средняя двойной клик"){mousedbl(MIDDLE, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Правая двойной клик"){mousedbl(RIGHT, smx+mX[0], smy+mY[0]); goto hy;}
  if (m=="Переместить"){mousemove(smx+mX[0], smy+mY[0]); goto hy;}
  }
  if (ew==2 || ew==4)
  {
  if (m=="Левую клик"){sendmouse(LEFT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Среднюю клик"){sendmouse(MIDDLE, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Правую клик"){sendmouse(RIGHT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Левую нажать"){sendmousedown(LEFT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Среднюю нажать"){sendmousedown(MIDDLE, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Правую нажать"){sendmousedown(RIGHT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Левую отпустить"){sendmouseup(LEFT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Среднюю отпустить"){sendmouseup(MIDDLE, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Правую отпустить"){sendmouseup(RIGHT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Левая двойной клик"){sendmousedbl(LEFT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Средняя двойной клик"){sendmousedbl(MIDDLE, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Правая двойной клик"){sendmousedbl(RIGHT, smx+mX[0], smy+mY[0], w); goto hy;}
  if (m=="Переместить")sendmousemove(smx+mX[0], smy+mY[0], w);
  }
  hy: if (m!="Бездействие")
  {
  pause (p3);
    if (per_m)
    {
    if (ew==0 || ew==3 || ew==1)mousemove(per_x, per_y);
    if (ew==2 || ew==4)sendmousemove(per_x, per_y, w);
    }
  }
int tX, tY;
  if (p4>0)
  {
    looptime(p4)
    {
    if (ew==0){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, -1)==0) return mK;}
    if (ew==1){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, -1)==0) return mK;}
    if (ew==2){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, w)==0) return mK;}
    if (ew==3 || ew==4){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, #Scr[0][0])==0) return mK;}
    sleep(5);
    }
  }
  if (povtor>0 && pvt<povtor)
  {
  smx=tsmx; smy=tsmy;
  if (ew==0){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, -1)==1) {pvt++; goto S;}}
  if (ew==1){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, -1)==1) {pvt++; goto S;}}
  if (ew==2){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, w)==1) {pvt++; goto S;}}
  if (ew==3 || ew==4){if (findheapcolor(1, #col[0], #kol[0], k_col, kol_col, #tX, #tY, Obl_n_x, Obl_n_y, Obl_o_x, Obl_o_y, ex1, ey1, ex2, ey2, r, r, r, r, r, r, #Scr[0][0])==1) {pvt++; goto S;}}
  }
return mK;
}
[END]

[CALL]
(EW, V_Screen[0][0], W_V, V_X, V_Y, Obl_N_X, Obl_N_Y, Obl_O_X, Obl_O_Y, V_color[0], V_kol[0], V_k_color, Kol_Col, Kol, Sort, SortX, SortY, K_V, X_V, Y_V, eX1, eY1, eX2, eY2, P1, T, R, Ignor, Mas_Ignor, P2, M, SmX, SmY, P3,  Per_M, Per_X, Per_Y, P4, POVTOR)
[END]


[FUNCTION_LOGIC]  
>0
[END]








