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