zaxlex пишет:
win w=window ("Program Manager", "Progman", -1);
int king6[300][300];
loadimage(#king6[0][0],"C:\Images\ok.bmp");
int x6[1],y6[1];
n: if (findimage(1, #king6[0][0], 255, #x6[1], #y6[1], 0, 0, 1920, 1080, w)==0)
{
sleep(50);
goto n;
}
mouse(LEFT,x6[1]+50,y6[1]+10);
sleep(1000);
Вообще странно что этот код не приводит к краху Кибор, так как идет обращение к не выделенной памяти. Быстрее всего после int x6[1],y6[1]; еще есть объявление int...
Ошибка в передаче указателей в findimage.
n: if (findimage(1, #king6[0][0], 255, #x6[
1], #y6[
1], 0, 0, 1920, 1080, w)==0)
Указатель указывает на
второй элемент массива. Первый это 0.
А сам массив имеет размер в 1 элемент int x6[1],y6[1];
Еще ошибка в указание системы координат в функции mouse. Она указана в экранных координатах, а координаты в x6[1]+50,y6[1]+10 записаны в оконных относительно win w=window ("Program Manager", "Progman", -1);
В данном случае будет кликать правильно только из за того, что указатель указывает на рабочий стол и координаты совпадают с экранными.
Правильно так кликать если в findimage указатель на окно:
Цитата:
win w=window ("Program Manager", "Progman", -1);
int king6[300][300];
loadimage(#king6[0][0],"C:\Images\ok.bmp");
int x6[1],y6[1];
n: if (findimage(1, #king6[0][0], 255, #x6[0], #y6[0], 0, 0, 1920, 1080, w)==0)
{
sleep(50);
goto n;
}
mouse(LEFT,x6[0]+50,y6[0]+10, 0, w);
sleep(1000);
Можно вообще так, так как тут массив не нужен так как поиск одного изображения
Цитата:
win w=window ("Program Manager", "Progman", -1);
int king6[300][300];
loadimage(#king6[0][0],"C:\Images\ok.bmp");
int x6,y6;
n: if (findimage(1, #king6[0][0], 255, #x6, #y6, 0, 0, 1920, 1080, w)==0)
{
sleep(50);
goto n;
}
mouse(LEFT,x6+50,y6+10, 0, w);
sleep(1000);
Ну а если очень хочется в экранных, то не надо указывать указатель на рабочий стол ("Program Manager", "Progman")
Можно просто в функции вместо указателя поставить -1
Цитата:
int king6[300][300];
loadimage(#king6[0][0],"C:\Images\ok.bmp");
int x6,y6;
n: if (findimage(1, #king6[0][0], 255, #x6, #y6, 0, 0, 1920, 1080, -1)==0)
{
sleep(50);
goto n;
}
mouse(LEFT,x6+50,y6+10);
sleep(1000);
Ну а вообще то, для нажатия на кнопки можно использовать другой подход :
Навести мышь на нужную кнопку
Нажать контр шифт s
В графе контролов получить указатель на кнопку
http://filesd.net/kibor/spy.php (поле 17).
И напрямую послать по этому указателю нажатие на кнопку:
Пример нажатия кнопки Обзор в диалоге Выполнить в win 7 (Запускаем диалог (Выполнить) в вин 7 - Пуск>выполнить.)
CODE:button(1 , window ("Об&зор...", -1, window ("Выполнить")));
Работает даже с не активным окном программы.
При необходимости следить за появлением кнопки можно так
CODE:
win w;
a: w=window ("Об&зор...", -1, window ("Выполнить"));
if (w==0){sleep(50); goto a;}
sleep(200);
button(1 , w);