Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Без описания
CblPHU4
Отправлено: 07 Сентября, 2022 - 13:50:12
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 29
Дата рег-ции: Авг. 2022  
Репутация: 0




Есть условный код
CODE:
win Alb = window ("Albion Online Client", "UnityWndClass", -1, -1, 1024, 768, -1); // захватывает окно Альбиона
activate(Alb); // активирует окно, на случай если закрыто
mouse(left, 100, 100, Alb);


Строка win создана через шпиона, размер клиент, окно главное
Команда activate работает, окно открывается если было свернуто
но вот при выполнении mouse выдает непонятную ошибку, с выводом этой самой строки
если к примеру ее заменить на нажатие клавиши через key, то команда работает исправно
аналогично с командой scanpixel, ошибки никакой нет, но он не считывает пиксель там где я указал

Подскажите в чем может быть проблема, может надо что-то добавить, чтобы работало корректно?
(Добавление)
Проблему клика решил тем, что LEFT или RIGHT надо писать большими буквами, и перед названием окна "Alb" добавить 1, как работа по активному окну, оказывается регист играет роль)))

Остается проблема со считываем пикселей в конкретном окне
Если использовать пример функции из Визуального редактора
CODE:
function ScanPixel(int #Scr, win #w, int p1, int t, int px, int py, int col, int r)
{
pause (p1);
if (t==0)t=1;
looptime(t)
{
if (scanpixel(px, py, col, r, r, r, r, r, r, Alb)) return 1;
sleep(5);
}
return 0;
}

Там где if (scanpixel... обрал лишнее за ненадобностью
Так вот, использованная в конце Alb не работает как обращение к окну, а если заменить на -1, типо активное окно, то не совпадают координаты указанные в коде

Мне нужно чтобы программа работала с окном, которое находится в любом месте, ибо мониторы у всех разные, под каждого подстраиваться тяжело
(Добавление)
Иииии я крч сделал
Быть может кому-то данная тема будет полезна, извините за срач)))

Для того, чтобы сканировать пиксели в нужном окне, прежде всего необходимо произвести клик в нужном окне, чтобы сделать его активным
У меня это mouse(RIGHT, 518, 345, 1, Alb); - кликает по координатам самого окна
Далее в коде, в ScanPixel добавил строчки Alb.leftclient, Alb.topclient, я так понял это нужно для создания скриншота в память, ранее было просто #Screen[0][0], #Alb
В функцию добавил переменные int v_x, int v_y, чтобы участвовали ниже
И также в функции изменил v_x+px, v_y+py, и в конце поставил -1, чтобы работать в активном окне
Все короче как в образце Визуального редактора в блоке ScanPixel
Основная проблема это непонимание, поэтому я их удалил изначально

Полный код (скан и движения мышки для примера)
CODE:
int Screen[3000][3000];
win Alb = window ("Albion Online Client", "UnityWndClass", -1, -1, 1024, 768, -1); // захватывает окно Альбиона
activate(Alb); // активирует окно, на случай если закрыто
mouse(RIGHT, 518, 345, 1, Alb);
key(0x4E,1,0,Alb); // открывает карту на N

// ScanPixel записывает для поиска пикселя
ScanPixel(#Screen[0][0], #Alb, Alb.leftclient, Alb.topclient, 1000, 10000, 410, 476, 16757601, 0);
mousemove(238, 572, Alb); // переместить мышку
key(0x90,1,0,w); // нажать NumLock
ScanPixel(#Screen[0][0], #Alb, Alb.leftclient, Alb.topclient, 0, 10000, 367, 514, 16757601, 0);
mousemove(237, 298, Alb);
ScanPixel(#Screen[0][0], #Alb, Alb.leftclient, Alb.topclient, 0, 10000, 345, 510, 16757601, 0);
mousemove(389, 212, Alb);
ScanPixel(#Screen[0][0], #Alb, Alb.leftclient, Alb.topclient, 0, 10000, 318, 486, 16757601, 0);
key(0x90,1,0,Alb);
key(0x53,1,0,Alb);
messagebox("Хорошо");



function ScanPixel(int #Scr, win #w, int v_x, int v_y, int p1, int t, int px, int py, int col, int r)
{
pause (p1);
if (t==0)t=1;
looptime(t)
{
if (scanpixel(v_x+px, v_y+py, col, r, r, r, r, r, r, -1)) return 1;
sleep(5);
}
return 0;
}
 
 Top
Dantes3000
Отправлено: 07 Сентября, 2022 - 17:01:38
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




mouse(LEFT, 100, 100, 1,Alb);
(Добавление)
??? Непонял!
 
 Top
Martin
Отправлено: 07 Сентября, 2022 - 17:37:52
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




 Цитата:
Мне нужно чтобы программа работала с окном, которое находится в любом месте, ибо мониторы у всех разные, под каждого подстраиваться тяжело

Есть ещё одна проблема у всех по разному распознаётся цвет пикселей, не понимаю как это работает, но разбежность не всегда помогает. Или это только у меня одного проблема что на двух компах разные цвета пикселей?

Я вот придумал решение но если есть лучше напишите) Нужно сканировать несколько точек на экране игры, потом сравнить их с эталонным образцом как у тебя, если цвета такие же то можно брать стандартный код, если цвета в тех точках имеют отличие то нужно как-то вычислить смещение цвета, это возможно вообще?
 
 Top
Dantes3000
Отправлено: 08 Сентября, 2022 - 14:56:53
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




 Цитата:
Я вот придумал решение но если есть лучше напишите)


Искать картинку с процентом совпадения <100
 
 Top
Kibor
Отправлено: 08 Сентября, 2022 - 19:45:30
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Martin пишет:
то нужно как-то вычислить смещение цвета, это возможно вообще?

Да.
Берете два скрина разных с разных компов.
Открываете их в паинте.
Делаете снимок первого изображения в Кибор.
Нажимаете кнопку запустить фильтр динамики. Делаете скрин в Кибор второго изображения.
Смотрите какие пикселя закрасились красным.
Для того что бы подобрать разбежность, указываете в настройках
разбег совпадения.. не 0, а больше.. Окрасятся пикселя только если они не совпадают более чем на указанную разбежность.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by