[ESCAPE_CHAR]
^
[END]

[APPEARANCE]
COLOR = 5, 120, 140;
SIZE_X = 10;
SIZE_Y =6;
[END]

[INTERFACE]
DIALOG, "Поиск изображения", 704, 489;
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, "Указатель на скрин", 480, 4, 104, 20;
EDIT, 592, 4, 100, 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, 72, 20;
EDIT, 80, 76, 516, 20, string Path;
BUTTON_FILE, "Путь к файлу", 600, 76, 92, 20, Path;
STATIC, "Зона поиска старт", 4, 100, 100, 20;
EDIT, 104, 100, 116, 20, int eX1;
EDIT, 224, 100, 116, 20, int eY1;
STATIC, "Зона поиска финиш", 352, 100, 100, 20;
EDIT, 456, 100, 116, 20, int eX2;
EDIT, 576, 100, 116, 20, int eY2;
CHECK, "Игнорировать зоны (построчно через запятую)", 4, 124, 264, 20, int Ignor;
EDIT_MULTILINE, 272, 124, 420, 72, string Mas_Ignor;
STATIC, "Цвет фона. Или -1", 4, 200, 100, 20;
EDIT, 108, 200, 56, 20, int CF;
STATIC, "Разбежность оттенков", 176, 200, 120, 20;
EDIT, 300, 200, 64, 20, int R;
STATIC, "Процент совпадения", 376, 200, 112, 20;
EDIT, 488, 200, 64, 20, int Proc;
CHECK, "Быстрый поиск", 564, 200, 100, 20, int G1;
STATIC, "Сколько искать. Или -1", 4, 224, 120, 20;
EDIT, 128, 224, 52, 20, int Kol;
CHECK, "Сортировать по удаленности от X", 204, 224, 200, 20, int Sort;
EDIT, 408, 224, 76, 20, int SortX;
STATIC, "Y", 500, 224, 12, 20;
EDIT, 516, 224, 76, 20, int SortY;
STATIC, "Переменные:  Количество", 4, 248, 140, 20;
EDIT, 148, 248, 72, 20, int K;
STATIC, "Массив X", 224, 248, 56, 20;
EDIT, 280, 248, 72, 20, int X;
STATIC, "Массив Y", 360, 248, 52, 20;
EDIT, 416, 248, 72, 20, int Y;
STATIC, "Заполнять массив с индекса", 492, 248, 152, 20;
EDIT, 648, 248, 44, 20, int I;
STATIC, "Пауза после нахождения", 4, 272, 132, 20;
EDIT, 140, 272, 100, 20, int P2;
STATIC, "Действие если нашли", 4, 296, 120, 20;
COMBO, "Левую клик""Среднюю клик""Правую клик""Левую нажать""Среднюю нажать""Правую нажать""Левую отпустить""Среднюю отпустить""Правую отпустить""Левая двойной клик""Средняя двойной клик""Правая двойной клик""Переместить""Бездействие", 128, 296, 224, 116, string M;
STATIC, "Смещение клика  X", 404, 296, 100, 20;
EDIT, 508, 296, 76, 20, int SmX;
STATIC, "Y", 600, 296, 12, 20;
EDIT, 616, 296, 76, 20, int SmY;
STATIC, "Пауза после действия, если было", 4, 320, 176, 20;
EDIT, 184, 320, 100, 20, int P3;
CHECK, "Перенести мышь после действия и паузы (если было)  X", 4, 344, 316, 20, int Per_M;
EDIT, 324, 344, 100, 20, int Per_X;
STATIC, "Y", 456, 344, 12, 20;
EDIT, 472, 344, 100, 20, int Per_Y;
STATIC, "Ожидать исчезновение объекта после клика и паузы мсек:", 4, 368, 312, 20;
EDIT, 324, 368, 100, 20, int P4;
STATIC, "Повторить блок дополнительно, если объект не исчез после клика, паузы и ожидания, количество раз:", 4, 392, 532, 20;
EDIT, 544, 392, 88, 20, int POVTOR;
STATIC, "Комментарий", 4, 416, 76, 20;
EDIT, 84, 416, 608, 20, unknown Comment;
BUTTON_OK, "Принять", 488, 440, 100, 20;
BUTTON_CANCEL, "Закрыть", 592, 440, 100, 20;
[END]

[INFO]
[ENDL]>>~GET(regexsearch(~Path~, "(?<=\\)(.*?)(?=\.)", 16))~>>[ENDL]>>M>>[ENDL]>>Comment
[END]


[ASSOC_NUMBER]
Path
[END]

[ASSOC_VAR]
EW=0;
W=W_Kib;
Screen=Screen;
P1=0;
T=0;
Path="C:\Image_0.bmp";
CF=-1;
R=0;
Proc=100;
Sort=0;
SortX=0;
SortY=0;
G1=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;
Image = #Image~*~;
File=~GET(regexsearch(~Path~, "(?<=\\)(.*?)", 16))~;
V_Screen=#~Screen~;
Comment=;
[END]

[GLOBAL_VAR]
win ~W~;
int ~Screen~[3000][3000];  
int ~K~, ~X~[1000], ~Y~[1000];  
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~]; 
[END]

[GLOBAL_REPEAT_CODE]
load_images();
[END]


[GLOBAL_SINGLE_CODE_BOTTOM]
function load_images()
{
}
[END]

[REGEXPLACE_CODE]
"function load_images\(\)"~%13~~%10~"\{"~%13~~%10~    =    "function load_images()"~%13~~%10~"{"~%13~~%10~"loadimage (#Image"~*~"[0][0], "~Path~");"~%13~~%10~;
[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 #image, int kol, 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 cf, int r, int proc, int g1, 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=findimage(SWIFT*g1, kol, #image[0][0], cf, #mX[0], #mY[0], ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, -1);
  if (ew==1)mK=findimage(SWIFT*g1, kol, #image[0][0], cf, #mX[0], #mY[0], v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, proc, 1, -1);
  if (ew==2)mK=findimage(SWIFT*g1, kol, #image[0][0], cf, #mX[0], #mY[0], ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, w);
  if (ew==3 || ew==4)mK=findimage(SWIFT*g1, kol, #image[0][0], cf, #mX[0], #mY[0], ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, #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 (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, -1)==0) return mK;}
    if (ew==1){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, proc, 1, -1)==0) return mK;}
    if (ew==2){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, w)==0) return mK;}
    if (ew==3 || ew==4){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, #Scr[0][0])==0) return mK;}
    sleep(5);
    }
  }
  if (povtor>0 && pvt<povtor)
  {
  smx=tsmx; smy=tsmy;
  if (ew==0){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, -1)==1) {pvt++; goto S;}}
  if (ew==1){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, r, r, r, r, r, r, proc, 1, -1)==1) {pvt++; goto S;}}
  if (ew==2){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, w)==1) {pvt++; goto S;}}
  if (ew==3 || ew==4){if (findimage(SWIFT*g1, 1, #image[0][0], cf, #tX, #tY, ex1, ey1, ex2, ey2, r, r, r, r, r, r, proc, 1, #Scr[0][0])==1) {pvt++; goto S;}}
  }
return mK;
}
[END]

[CALL]
(EW, V_Screen[0][0], W_V, V_X, V_Y, Image[0][0], Kol, Sort, SortX, SortY, K_V, X_V, Y_V, eX1, eY1, eX2, eY2, P1, T, CF, R, Proc, G1, Ignor, Mas_Ignor, P2, M, SmX, SmY, P3,  Per_M, Per_X, Per_Y, P4, POVTOR)
[END]

[FUNCTION_LOGIC]  
>0
[END]








