21. zaxlex - 20 Января, 2014 - 17:03:56 - перейти к сообщению
функция loadimage(#king[0][0],f1); f1 - путь к файлу, king - массив типа int. И потом идет функция findimage. Такой вопрос - если в массив King уже загружалось изображение и это изображение больше изображения, которое мы загружаем второй раз.То поиск findimage будет работать неверно? или функция loadimage - оставляет в массиве только пикселя нового изображения?
22. Kibor - 20 Января, 2014 - 17:31:00 - перейти к сообщению
loadimage при загрузке изображения в массив загружает полностью все изображение, а неиспользуемую память, которая остается если изображение меньше массива инициализирует -1.
Можно сколько угодно раз перегружать в массив изображения. Главное что бы они не были по размеру больше массива.
Сколько у Вас изображений надо грузить? Вообще то я не вижу смысла постоянно перед поиском загружать в один и тот же массив разные изображения. loadimage надо вызывать один раз и хранить картинки в разных массивах.
Если проблема в использование своей функции как у Вас (то есть хотите сделать одну функцию которую будете вызывать для разных изображений)
то используйте массивы изображений. Ну и выставьте int king[400][400]; по максимальному. Если он меньше 400 400, то уменьшите его.
Можно сколько угодно раз перегружать в массив изображения. Главное что бы они не были по размеру больше массива.
zaxlex пишет:
то есть findimage будет работать неверно?
Все будет верно.Сколько у Вас изображений надо грузить? Вообще то я не вижу смысла постоянно перед поиском загружать в один и тот же массив разные изображения. loadimage надо вызывать один раз и хранить картинки в разных массивах.
Если проблема в использование своей функции как у Вас (то есть хотите сделать одну функцию которую будете вызывать для разных изображений)
CODE:
int king[400][400];
int x,y;
string s2="C:\Images\chekit.bmp";
n4: if (proverka(s2)==0) {sleep(50);goto n4;}
key("ugcl");
key(13);
function proverka (string f1)
{
loadimage(#king[0][0],f1);
sleep(4000);
if (findimage(1, #king[0][0], 255, #x, #y, 0, 0, 1920, 1080, -1)==0)
{
return 0;
}
else
{
return 1;
}
}
int x,y;
string s2="C:\Images\chekit.bmp";
n4: if (proverka(s2)==0) {sleep(50);goto n4;}
key("ugcl");
key(13);
function proverka (string f1)
{
loadimage(#king[0][0],f1);
sleep(4000);
if (findimage(1, #king[0][0], 255, #x, #y, 0, 0, 1920, 1080, -1)==0)
{
return 0;
}
else
{
return 1;
}
}
то используйте массивы изображений. Ну и выставьте int king[400][400]; по максимальному. Если он меньше 400 400, то уменьшите его.
CODE:
int king[10][100][200];
int x,y;
loadimage(#king[0][0][0],"C:\Images\chekit.bmp");
loadimage(#king[1][0][0],"C:\Images\chekit1.bmp");
loadimage(#king[2][0][0],"C:\Images\chekit2.bmp");
//..................................................
n4: if (proverka(0)==0) {sleep(50);goto n4;}
key("qqqqqq");
n5: if (proverka(1)==0) {sleep(50);goto n5;}
key("wwwwwwwwwww");
n2: if (proverka(2)==0) {sleep(50);goto n2;}
key("rrrrrrrrrrr");
//..............................
function proverka (int t)
{
return findimage(1, #king[t][0][0], 255, #x, #y, 0, 0, 1920, 1080, -1);
}
int x,y;
loadimage(#king[0][0][0],"C:\Images\chekit.bmp");
loadimage(#king[1][0][0],"C:\Images\chekit1.bmp");
loadimage(#king[2][0][0],"C:\Images\chekit2.bmp");
//..................................................
n4: if (proverka(0)==0) {sleep(50);goto n4;}
key("qqqqqq");
n5: if (proverka(1)==0) {sleep(50);goto n5;}
key("wwwwwwwwwww");
n2: if (proverka(2)==0) {sleep(50);goto n2;}
key("rrrrrrrrrrr");
//..............................
function proverka (int t)
{
return findimage(1, #king[t][0][0], 255, #x, #y, 0, 0, 1920, 1080, -1);
}
23. zaxlex - 22 Января, 2014 - 10:42:41 - перейти к сообщению
Здравствуйте, такая проблема - не записывается с буфера обмена в переменную типа string, просто выводит пустой messagebox.
CODE:
sendlanguage("00000409", 0);
sleep(1000);
start("C:\Program Files\Google\Chrome\Application\chrome.exe");
if (f2=="C:\Images\36.bmp") {klikleft(s4); klikleft(k41);}
n5: if (proverka(s1)==1) {sendlanguage("00000409", 0);key("genword.ru/generator/nicknames");}
else {goto n5;}
key(13);
n4: if (proverka(k39)==1) {klikleft(k39);}
else {goto n4;}
klikleft(k40);
sleep(5000);
mousetransfer(LEFT,x-170,y+75,x+70,y+75,0.02);
keydown(17);
key('c');
keyup(17);
klikleft(s3);
writeclipboard(s);
messagebox(s);
sleep(1000);
start("C:\Program Files\Google\Chrome\Application\chrome.exe");
if (f2=="C:\Images\36.bmp") {klikleft(s4); klikleft(k41);}
n5: if (proverka(s1)==1) {sendlanguage("00000409", 0);key("genword.ru/generator/nicknames");}
else {goto n5;}
key(13);
n4: if (proverka(k39)==1) {klikleft(k39);}
else {goto n4;}
klikleft(k40);
sleep(5000);
mousetransfer(LEFT,x-170,y+75,x+70,y+75,0.02);
keydown(17);
key('c');
keyup(17);
klikleft(s3);
writeclipboard(s);
messagebox(s);
24. Kibor - 22 Января, 2014 - 12:47:23 - перейти к сообщению
zaxlex пишет:
Здравствуйте, такая проблема - не записывается с буфера обмена в переменную типа string, просто выводит пустой messagebox.
zaxlex пишет:
writeclipboard(s);
messagebox(s);
messagebox(s);
?
Работа с буфером обмена
Цитата:
writeclipboard - запись в буфер обмена.
readclipboard - чтение с буфера обмена.
readclipboard - чтение с буфера обмена.
http://kibor-bot.com/forum/topic...41471#1390241471
Соседняя тема.
25. zaxlex - 24 Января, 2014 - 06:50:25 - перейти к сообщению
Здравствуйте, благополучно дописал бота, вроде работает, но иногда вылетает ошибка string[87]=k43. При выполнение скрипта у меня встречается нестандартная ситуация
и при появлении такой вот ситуации вылетает ошибка, в чем может быть проблема не подскажите?
2-ой вопрос у меня скрипт работает из под виртуалки и при его удачном выполнение перезагружает виртуалку в конце, я бы хотел перестраховаться и при его зависании на какой-нибудь части программы, чтобы он сразу перезагружал виртуалку, как бы это реализовать пограмотней?
CODE:
n8:klikleft(k28);
klikleft(k29);
sendlanguage("00000409", 0);
key(s);
key(9);
key("ping123");
klikleft(k30);
sleep(3000);
if (proverka(k42)==1) {klikleft(k42); klikleft(43); goto n8;}
klikleft(k29);
sendlanguage("00000409", 0);
key(s);
key(9);
key("ping123");
klikleft(k30);
sleep(3000);
if (proverka(k42)==1) {klikleft(k42); klikleft(43); goto n8;}
и при появлении такой вот ситуации вылетает ошибка, в чем может быть проблема не подскажите?
2-ой вопрос у меня скрипт работает из под виртуалки и при его удачном выполнение перезагружает виртуалку в конце, я бы хотел перестраховаться и при его зависании на какой-нибудь части программы, чтобы он сразу перезагружал виртуалку, как бы это реализовать пограмотней?
26. Kibor - 24 Января, 2014 - 07:01:44 - перейти к сообщению
Не объявлена k43 или перед ней ошибка... ее не видно
Если программа зависла, она не может сделать ничего...
Разве запустить вторую копию Кибор который будет следить за первой и если она вылетела - перегружать. но только если вылетела
что значит вообще зависание??
Если программа зависла, она не может сделать ничего...
Разве запустить вторую копию Кибор который будет следить за первой и если она вылетела - перегружать. но только если вылетела
что значит вообще зависание??
27. zaxlex - 24 Января, 2014 - 21:59:46 - перейти к сообщению
отличная идея по поводу второй версии программы? может код есть? я имею ввиду, что у меня бывает 2-а залага программы, первая - это действительно залаг самой программы, а вторая - это недочеты в алгоритме, которые проявляются в течении работы - я их исправляю, но время от остановки скрипта до моего вмешательства теряется. Виснет - то есть происходит зацикливание в функции klikleft. Было бы неплохо добавить к этой функции условие при котором запускался таймер и если он перевысил 2-е муниты например, то происходил переход по указателю к перезагрузке виртуалки.
28. Kibor - 24 Января, 2014 - 22:40:58 - перейти к сообщению
zaxlex пишет:
по поводу второй версии программы? может код есть?
Если программа вылетела, то вторая копия Кибор отследит это так:
CODE:
//Запускать после первой
a: if (window("Название окна первой программы")!=0){sleep(200); goto a;}//Указатель на первую
//На этот код попадет если программа первая вылетела
messagebox ("");
a: if (window("Название окна первой программы")!=0){sleep(200); goto a;}//Указатель на первую
//На этот код попадет если программа первая вылетела
messagebox ("");
Для простоты можно в основную программу вставить в старт кода
CODE:
rename("блаблабала");
После запуска скрипта окно Кибор будет иметь это название.
Во вторую которая следит
CODE:
//Запускать после первой
a: if (window("блаблабала")!=0){sleep(200); goto a;}//Указатель на первую
//На этот код попадет если программа первая вылетела
messagebox ("");
a: if (window("блаблабала")!=0){sleep(200); goto a;}//Указатель на первую
//На этот код попадет если программа первая вылетела
messagebox ("");
zaxlex пишет:
2-а залага программы, первая - это действительно залаг самой программы
Подробнее? Если баг - исправлю. Но я не встречал таких багов... Обычно я их быстро исправляю.
zaxlex пишет:
Виснет - то есть происходит зацикливание в функции klikleft. Было бы неплохо добавить к этой функции условие при котором запускался таймер и если он перевысил 2-е муниты например, то происходил переход по указателю к перезагрузке виртуалки.
Ну этот таймер есть почти в каждом скрипте...
CODE:
function klikleft()
{
int time=gettime();
qwe: if (gettime()-time>12000)
{
//Перегрузи
return;
}
//код
goto qwe;
}
{
int time=gettime();
qwe: if (gettime()-time>12000)
{
//Перегрузи
return;
}
//код
goto qwe;
}
29. zaxlex - 02 Февраля, 2014 - 23:04:30 - перейти к сообщению
Программа зависла только раз и больше не повторялось. Сейчас такая ситуация - я переустановил windows и забыл перенести папку с изображениями.Программа у меня работает из под виртуалки, которую я также переустановил. Первая проблема возникла на момент загрузки кибора. http(5) error installation abort. Такая проблема была уже на форуме и вы давали прямую ссылку на кибор - я загрузил по этой ссылке кибор и удачно установил. Кибор работает в windows xp в shadow mode при запущенном shadow defendere. Запускной файл был создан и помещен в автозагрузку. Я столкнулся с совершенно непонятной проблемой. Полностью отредактировав до рабочего состояния я перенес все файлы на флэшку. конец работы программы у меня - перезагрузка виртуалки - т.к она находится в shadow mode - происходит откат изменений, созданных кибором. И при запуске виртуалки происходит опять запуск скрипта и он начинает работать до определенного изображения, которое он не находит,хотя на экране оно присутствует.Если я опять делаю снимок искомого изображения и сохраняю его вместо текущего, то программа начинает работать дальше до следующего изображения,которое не может найти и таких изображений где-то десяток при чем все остальные удачно находятся.Может изображение действительно отличается на незаметные для глаза пикселя, но до переустановки windows на прошлой виртуалке - все работало. При чем я попробывал запустить кибор и найти изображение на котором происходил сбой - не находит. Потом открыл этот bmp файл и опять не находит( не кликает по нему и не завершает работу скрипта) на прошлой виртуалке - находил.Я пробывал отредактировать все проблемные изображения, сохранить все изменения, создать запускной файл, но опять после перезагрузки все доходило до первого проблемного изображения, которое я отредактировал и зацикливание в функции klikleft - так как скрипт не может найти изображение.В чем может быть проблема подскажите пожалуйста, а то я уже не знаю что делать.
30. Kibor - 03 Февраля, 2014 - 02:40:48 - перейти к сообщению
Если не находит - значит отличаются. Попробуйте расширенные findimage.