Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Не работают клики мыши в окне

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

1. CblPHU4 - 07 Сентября, 2022 - 05:50:12 - перейти к сообщению
Есть условный код
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;
}
2. Dantes3000 - 07 Сентября, 2022 - 09:01:38 - перейти к сообщению
mouse(LEFT, 100, 100, 1,Alb);
(Добавление)
??? Непонял!
3. Martin - 07 Сентября, 2022 - 09:37:52 - перейти к сообщению
 Цитата:
Мне нужно чтобы программа работала с окном, которое находится в любом месте, ибо мониторы у всех разные, под каждого подстраиваться тяжело

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

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


Искать картинку с процентом совпадения <100
5. Kibor - 08 Сентября, 2022 - 11:45:30 - перейти к сообщению
 Martin пишет:
то нужно как-то вычислить смещение цвета, это возможно вообще?

Да.
Берете два скрина разных с разных компов.
Открываете их в паинте.
Делаете снимок первого изображения в Кибор.
Нажимаете кнопку запустить фильтр динамики. Делаете скрин в Кибор второго изображения.
Смотрите какие пикселя закрасились красным.
Для того что бы подобрать разбежность, указываете в настройках
разбег совпадения.. не 0, а больше.. Окрасятся пикселя только если они не совпадают более чем на указанную разбежность.

Powered by ExBB FM 1.0 Final