Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Khodorko on January 21, 2019, 05:41:01 PM
-
Добрый день. Появился вопрос: как можно задать начало координат при написании скрипта? Поясню: мне нужно, чтобы при выполнении скрипта, кликерман за координаты 0,0 считал не верхний левый угол экрана, а произвольно заданную точку, например где-то посередине, и пиксели для клика мыши отсчитывал уже от неё. Нужно мне это для того, чтобы я мог разместить окно программы, для которой пишется скрипт, в любом месте. Привязка к окну в конкретно этой проге не работает, она начинает сбоить
-
Насчет возможности просто где-то циферки написать - и чтоб всё само перенастроилось, не знаю, есть ли возможность.
А так можно везде использовать относительные координаты (не "100,200" а " $xstart+100, $ystart+200"). Т.е. допустим, привязываете к какой-то точке (или через поиск картинки - что надежнее, т.к. каждый раз одинаково кликнуть вы не сможете) и переделываете все координаты как точку отсчета +/- какое-то значение.
У меня для удобства вот такая подпрограмма, чтобы вручную не высчитывать координаты квадратов. Надо просто следовать инструкции в логах и после копировать результаты вместо координат х1,у1,х2,у2.
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
-
Можно воспользоваться функциями для работы с окнами.
Вот примеры из Справки + вывод некоторой информации об окне в Лог.
// Забавляемся с калькулятором
$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