Кибор - спасибо Вам за прекрасную программу, из нескольких мной протестированных на указанной ниже жертве, только он находит картинки и жмет на них, когда курсор мыши находится в активной части браузера.
Пишу скрипт бота для браузерной флеш игры в познавательных целях.
Скрипт работает, но не совсем так, как хотелось бы.
Это моя первая программка, поэтому прошу помощи и советов, как лучше ее реализовать.
sendmouse - работает не так, как хотелось бы в свернутых или не активных окнах браузеров, причем по разному, но не эффективно. Подробнее в комментариях к коду в шапке кода.
И другие вопросы в комментариях к коду, очень многое не понятно.
Прошу подсказать как лучше сделать.
Тут скрипт и картинки
CODE:
http://yadi.sk/d/zcXF1bJMDoUxf
Потестить скрипт можно тут (игра "Мегаполис" :
CODE:
/http://www.odnoklassniki.ru/game/mega
http://my.mail.ru/apps/494497
http://vk.com/app1858070
/http://www.odnoklassniki.ru/game/mega
http://my.mail.ru/apps/494497
http://vk.com/app1858070
Также есть несколько вопросов по реализации логики переходов в программе, но это немного позже.
Очень признателен за ваши комментарии по коду. Спасибо.
Код не умещается в данное сообщение. Увы.
(Добавление)
CODE:
//ver.21"Мегаполис"
//http://www.odnoklassniki.ru/game/mega============http://my.mail.ru/apps/494497===========http://vk.com/app1858070
//ver.21 ///sendmouse/ - работает ОК !!!//???? по картинка 2 и 3 кликает ОК, но с картинкой 0 и 1
//проблемы по разному в браузерах если курсор мыши вне пределов окна или окно свернуто - нет кликов по картинкам 0 и 1//????
// НЕ СООТВЕТСТВИЯ В БРАУЗЕРАХ:
//????ХРОМ - 0и1 рисунки выделяются,но по ним нет клика, при сворачивании окна в хроме оно активируется и разворачивается на экран.; //????
//????ФАЙРФОКС - 0и1 рисунки не выделяются, И по ним нет клика, при сворачивании окна в хроме оно активируется и разворачивается на экран.; //????
win w;
int x, y;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(x, y);
w=getwindow(1, x, y);//win w=getwindow(0, X, Y);//(0 получает указатель главного окна или если 1 получает контролла который по этим координатам.координата x y);
sleep(2000);
er:;
//
int color, xe, ye;//xe, ye - разрешение экрана всего
getdisplay(color, xe, ye);//Узнать разрешение экрана
int w;//int n;//int t;z
int Image_0[16][18];
int Image_1[16][15];
int Image_2[27][25];
int Image_3[28][25];
//activate(w);//sleep(500);
loadimage (#Image_0[0][0], "C:\megapolis\Image_0.bmp");
loadimage (#Image_1[0][0], "C:\megapolis\Image_1.bmp");
loadimage (#Image_2[0][0], "C:\megapolis\Image_2.bmp");
loadimage (#Image_3[0][0], "C:\megapolis\Image_3.bmp");
int PosX_0[1];int PosY_0[1];
int PosX_1[1];int PosY_1[1];
int PosX_2[1];int PosY_2[1];
int PosX_3[1];int PosY_3[1];
[code]
[i](Добавление)[/i]
[code]
////???? Тут ничего не понятно, но по картинкам кликает. Надо разобраться, как писать условие. ????
//a: if (poisk_Image_0()==1)
a: if (poisk_Image_0()>=0)
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a;
// 0 //
function poisk_Image_0()
{
int k=findimage(-1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
if (k==0)
{
//sort(600, 370, #PosX_2[0], #PosY_2[0], k);// ???? Не понятно. Так не пойдет. ХОТЕЛОСЬ БЫ:
//Надо разобраться как сделать, чтоб было не 600,370 - а рассчитывало от центра контрола
//и используя рандомное значение от цента по X Y назначало точку для поиска и клика
//по ближайшей картинке в пределах контора в игровой зоне ???
sendmouse(LEFT, PosX_0[0]+7+rand(-4,4), PosY_0[0]+8+rand(-4,4), w);
sleep(500);
sendmouse(LEFT, PosX_0[0]+9+rand(-2,2), PosY_0[0]+10+rand(-2,2), w);
sleep(rand(200,500));
return 1;
}
return 0;
}
// 1 //
function poisk_Image_1()
{
z1: if (findimage(-1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z1;
}
sendmouse(LEFT, PosX_1[0]+7+rand(-4,4), PosY_1[0]+7+rand(-4,4), w);
sleep(500);
sendmouse(LEFT, PosX_1[0]+9+rand(-2,2), PosY_1[0]+9+rand(-2,2), w);
sleep(rand(200,500));
}
// 2 //
function poisk_Image_2()
{
z2: if (findimage(-1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z2;}
sendmouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
sleep(rand(200,500));
}
// 3 //
function poisk_Image_3()
{
z3: if (findimage(-1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z3;}
sendmouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
sleep(rand(200,500));
}
//
//http://www.odnoklassniki.ru/game/mega============http://my.mail.ru/apps/494497===========http://vk.com/app1858070
//ver.21 ///sendmouse/ - работает ОК !!!//???? по картинка 2 и 3 кликает ОК, но с картинкой 0 и 1
//проблемы по разному в браузерах если курсор мыши вне пределов окна или окно свернуто - нет кликов по картинкам 0 и 1//????
// НЕ СООТВЕТСТВИЯ В БРАУЗЕРАХ:
//????ХРОМ - 0и1 рисунки выделяются,но по ним нет клика, при сворачивании окна в хроме оно активируется и разворачивается на экран.; //????
//????ФАЙРФОКС - 0и1 рисунки не выделяются, И по ним нет клика, при сворачивании окна в хроме оно активируется и разворачивается на экран.; //????
win w;
int x, y;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(x, y);
w=getwindow(1, x, y);//win w=getwindow(0, X, Y);//(0 получает указатель главного окна или если 1 получает контролла который по этим координатам.координата x y);
sleep(2000);
er:;
//
int color, xe, ye;//xe, ye - разрешение экрана всего
getdisplay(color, xe, ye);//Узнать разрешение экрана
int w;//int n;//int t;z
int Image_0[16][18];
int Image_1[16][15];
int Image_2[27][25];
int Image_3[28][25];
//activate(w);//sleep(500);
loadimage (#Image_0[0][0], "C:\megapolis\Image_0.bmp");
loadimage (#Image_1[0][0], "C:\megapolis\Image_1.bmp");
loadimage (#Image_2[0][0], "C:\megapolis\Image_2.bmp");
loadimage (#Image_3[0][0], "C:\megapolis\Image_3.bmp");
int PosX_0[1];int PosY_0[1];
int PosX_1[1];int PosY_1[1];
int PosX_2[1];int PosY_2[1];
int PosX_3[1];int PosY_3[1];
[code]
[i](Добавление)[/i]
[code]
////???? Тут ничего не понятно, но по картинкам кликает. Надо разобраться, как писать условие. ????
//a: if (poisk_Image_0()==1)
a: if (poisk_Image_0()>=0)
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a;
// 0 //
function poisk_Image_0()
{
int k=findimage(-1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
if (k==0)
{
//sort(600, 370, #PosX_2[0], #PosY_2[0], k);// ???? Не понятно. Так не пойдет. ХОТЕЛОСЬ БЫ:
//Надо разобраться как сделать, чтоб было не 600,370 - а рассчитывало от центра контрола
//и используя рандомное значение от цента по X Y назначало точку для поиска и клика
//по ближайшей картинке в пределах контора в игровой зоне ???
sendmouse(LEFT, PosX_0[0]+7+rand(-4,4), PosY_0[0]+8+rand(-4,4), w);
sleep(500);
sendmouse(LEFT, PosX_0[0]+9+rand(-2,2), PosY_0[0]+10+rand(-2,2), w);
sleep(rand(200,500));
return 1;
}
return 0;
}
// 1 //
function poisk_Image_1()
{
z1: if (findimage(-1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z1;
}
sendmouse(LEFT, PosX_1[0]+7+rand(-4,4), PosY_1[0]+7+rand(-4,4), w);
sleep(500);
sendmouse(LEFT, PosX_1[0]+9+rand(-2,2), PosY_1[0]+9+rand(-2,2), w);
sleep(rand(200,500));
}
// 2 //
function poisk_Image_2()
{
z2: if (findimage(-1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z2;}
sendmouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
sleep(rand(200,500));
}
// 3 //
function poisk_Image_3()
{
z3: if (findimage(-1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z3;}
sendmouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
sleep(rand(200,500));
}
//