Author Topic: Начало координат при выполнении скрипта  (Read 1768 times)

0 Members and 1 Guest are viewing this topic.

Khodorko

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Добрый день. Появился вопрос: как можно задать начало координат при написании скрипта? Поясню: мне нужно, чтобы при выполнении скрипта, кликерман за координаты 0,0 считал не верхний левый угол экрана, а произвольно заданную точку, например где-то посередине, и пиксели для клика мыши отсчитывал уже от неё. Нужно мне это для того, чтобы я мог разместить окно программы, для которой пишется скрипт, в любом месте. Привязка к окну в конкретно этой проге не работает, она начинает сбоить

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Насчет возможности просто где-то циферки написать - и чтоб всё само перенастроилось, не знаю, есть ли возможность.

А так можно везде  использовать относительные координаты (не "100,200" а " $xstart+100,  $ystart+200"). Т.е. допустим, привязываете к какой-то точке (или через поиск картинки - что надежнее, т.к. каждый раз одинаково кликнуть вы не сможете) и переделываете все координаты как точку отсчета +/- какое-то значение.
У меня для удобства вот такая подпрограмма, чтобы вручную не высчитывать координаты квадратов. Надо просто следовать инструкции в логах и после копировать результаты вместо координат х1,у1,х2,у2.

Code: (clickermann) [Select]
SUB(координаты,$name,$num)
   WAITMS(300)
   $xxxxx=GETVAR (STRCONCAT("$x",$name)) // если картинка не была найдена, будет сообщение об интерпретации строки - игнорируем
   $yyyyy=GETVAR (STRCONCAT("$y",$name)) //если картинка не была найдена, будет  сообщение об интерпретации строки - игнорируем
   Print ($name," отчет от ", $xxxxx,"-",$yyyyy)
   Print ("SHIFT для подтверждения, клик для смены")
   WHILE(iskeydown(#SHIFT )=0)
      If(iskeydown(1)=1)
         while(iskeydown(1)=1)
            waitms(10)
         End_cyc
         $xxxxx=$_return1
         $yyyyy=$_return2
         Print ($xxxxx,"-",$yyyyy)
      End_If
   END_CYC
   Print ("отчет от ", $xxxxx,$yyyyy)
   WAITMS(200)
   FOR($a=0,$a<$num) // повторяем N раз
      WAITMS(100)
      Print ("1 кликните и нажмите ALT")
      WHILE(iskeydown(#ALT )=0)
         IF(iskeydown(1)=1)
            while(iskeydown(1)=1)
               waitms(10)
            End_cyc
            $xxx1=$_xmouse
            $yyy1=$_ymouse
            Print ("1 ",$xxx1,$yyy1 )
         END_IF
      END_CYC
      Print ("2 кликните и нажмите ALT")
      WAITMS(300)
      WHILE(iskeydown(#ALT )=0)
         IF(iskeydown(1)=1)
            while(iskeydown(1)=1)
               waitms(10)
            End_cyc
            $xxx2=$_xmouse
            $yyy2=$_ymouse
            Print ("2 ",$xxx2,$yyy2 )
         END_IF
      END_CYC
      WAITMS(100)
     
      Print("записываю относительные координаты квадрата ", $a+1)
     
      $xx1= $xxx1-$xxxxx
      $yy1= $yyy1-$yyyyy
      $xx2= $xxx2-$xxxxx
      $yy2= $yyy2-$yyyyy
     
      If ($xx1>0)
         $xx1= STRCONCAT("+",$xx1)
      END_IF
      If ($yy1>0)
         $yy1= STRCONCAT("+",$yy1)
      END_IF
      If ($xx2>0)
         $xx2= STRCONCAT("+",$xx2)
      END_IF
      If ($yy2>0)
         $yy2= STRCONCAT("+",$yy2)
      END_IF
      $stroka=strconcat("$x", $name, $xx1, ",$y",$name,$yy1, ",$x", $name, $xx2, ",$y",$name,$yy2)
      print($stroka)
      WAITMS(100)
   //   print("save")
    //  SCREENSHOTEX($xxx1,$yyy1, $xxx2,$yyy2, $stroka, 0)
   END_CYC
END_SUB


   GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "start.bmp", -1, 90)  // название картинки, по которой будет осуществляться привязка
      print("start+")
      $xstart=$_return1  // собственно названия точки отсчета
      $ystart=$_return2 //собственно названия точки отсчета
       Else
      Print("-")
   End_if
////////// вызов подпрограммы ////////////////////////////////////////
     координаты("start",1)  /// запуск подпрограммы - отсчет от найденной картинки, если нашли и подтвердили кнопкой SHIFT. Если не найдено или же решили от другого места - сперва клик, потом SHIFT. В кавычках наименование начальной координаты (картинки) от которой ищем относительные координаты, цифра - количество квадратов, координаты которых надо заменить на относительные.
 halt

Shada

  • Освоившийся
  • **
  • Posts: 24
    • View Profile
Можно воспользоваться функциями для работы с окнами.
Вот примеры из Справки + вывод некоторой информации об окне в Лог.

Code: (clickermann) [Select]
// Забавляемся с калькулятором
$hwnd = WNDFIND("Калькулятор")

// получаем информацию
WNDGETINFO($hwnd, $var1, $var2, $var3, $var4)

// смотрим в Логе на полученную информацию
LOGWRITE ("$x = ", $var1)
LOGWRITE ("$y = ", $var2)
LOGWRITE ("Ширина окна = ", $var3)
LOGWRITE ("Высота окна = ", $var4)

// перезаписываем размер окна
$var3 = 100
$var4 = 100

// обновляем информацию
WNDSETINFO($hwnd, $var1, $var2, $var3, $var4)

// перемещаем окно куда нам нужно
WNDPOS($hwnd, 10, 10)

HALT