Junior |
Отправлено: 24 Мая, 2018 - 21:28:21
|
Прохожий
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2018
Репутация: 0
|
Нужна помощь в освоении функций. На данный момент это findimage.
Не могу разобраться с синтаксисом этой функции.
CODE:win wind = window ("Безымянный — Блокнот", "Notepad", -1);
wind.leftclient=1; wind.topclient=50;
moveclient(wind);
int lClient=wind.leftclient;
int tClient=wind.topclient;
int wClient=wind.widthclient;
int hClient=wind.heightclient;
int col_KIB, ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int bloknot[33][16];
start_();
outofbase_();
function start_()
{
getdisplay(32, wClient, hClient);
load_image_();
pause(1000);
}
function outofbase_()
{
if (findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], lClient, tClient, wClient, hClient, wind)<1)
{
pause(200);
textout(1, 120,90, "Something wrong", 0);
} else {
mousemove(x_base[0], y_base[0]);
pause(100);
}
}
function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\file.bmp");//изображение кнопки(надписи) меню: "файл"
}
В результате этого выходит ошибка:
Цитата:
---------------------------
Kibor
---------------------------
Ошибка в:
findimage(1,#outofbase1[0][0],0,#xbase[0]ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ,#ybase[0]ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ,1,50,730,635,WINS[0])<1goto22
---------------------------
ОК
---------------------------
Что я делаю не так ? Пробовал менять в самих параметрах этой функции, вне её всякое пробовал, выдаёт разные ошибки, но всегда ругается именно на строку с findimage.
И вопрос по переменным, почему в некоторых случаях используется решётка "#" а в некоторых нет, как ими правильно оперировать, куда надо дописывать "#", куда не надо и как их объявлять(переменные такие)? |
|
|
Junior |
Отправлено: 25 Мая, 2018 - 03:32:08
|
Прохожий
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2018
Репутация: 0
|
Kibor пишет: getdisplay(32, wClient, hClient);
ошибки
xbase ybase
нет объявления
Сделал(объявил переменные, поставил значения в getdisplay, даже добавил разбег в findimage), вроде заработало, но не находит картинку
CODE:win wind = window ("Безымянный — Блокнот", "Notepad", -1);
wind.leftclient=1; wind.topclient=50;
moveclient(wind);
int lClient=wind.leftclient;
int tClient=wind.topclient;
int wClient=wind.widthclient;
int hClient=wind.heightclient;
int xbase[0];//объявил
int ybase[0];//объявил
int bloknot[33][16];
start_();
outofbase_();
function start_()
{
getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?
load_image_();
pause(1000);
}
function outofbase_()
{
pause(200);
if (findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], lClient, tClient, wClient, hClient, 20, 20, 20, 20, 20, 20, 100, 0, wind)<1) //добавил разбег по цветам
{
pause(200);
textout(1, 120,90, "Something wrong", 0);
messagebox("Не получилось");
} else {
mousemove(xbase[0], ybase[0]);
pause(100);
messagebox("Получилось");
}
}
function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\file.bmp");
} |
|
|
Zireael |
Отправлено: 25 Мая, 2018 - 03:51:24
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Блокнот не самый удачный вариант. Для начала проще на рабочем столе найти какой-то ярлык.
Цитата: int xbase[0];//объявил
int ybase[0];//объявил
Нужно размер указывать.
CODE:int xbase[5]; // массив на 5 элементов
int ybase[5];
Цитата: getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?
CODE:int color, x, y;
getdisplay(color, x, y);
messagebox(x);
messagebox(y); |
|
|
Junior |
Отправлено: 25 Мая, 2018 - 04:21:04
|
Прохожий
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2018
Репутация: 0
|
Zireael пишет: Блокнот не самый удачный вариант. Для начала проще на рабочем столе найти какой-то ярлык.
Цитата: int xbase[0];//объявил
int ybase[0];//объявил
Нужно размер указывать.
CODE:int xbase[5]; // массив на 5 элементов
int ybase[5];
Цитата: getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?
CODE:int color, x, y;
getdisplay(color, x, y);
messagebox(x);
messagebox(y);
Упростил ещё больше
CODE:int xbase[1];//îáúÿâèë
int ybase[1];//îáúÿâèë
int bloknot[47][50];
start_();
outofbase_();
function start_()
{
getdisplay(32, 1920, 1080); //ïîìåíÿë. åñòü êàêàÿ òî âñòðîåííàÿ ãëîáàëüíàÿ ïåðåìåííàÿ, ÷òîáû âûä¸ðãèâàòü ðàçðåøåíèå ýêðàíà?
load_image_();
pause(1000);
}
function outofbase_()
{
pause(200);
findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], 0, 0, 1920, 1080, 20, 20, 20, 20, 20, 20, 100, 1, -1)
pause(200);
string xy=format(xbase[0])+" "+ybase[0]);
mousemove(xbase[0], ybase[0]);
messagebox(xy);
pause(100);
}
}
function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\ikonka.bmp");
}
всё равно не находит
(Добавление)
там где объявил стринговую переменную немного ошибся, забыл дописать "format("
после исправления, меседжбокс выдаёт
---------------------------
Kibor
---------------------------
-842150451 -842150451
---------------------------
ОК
--------------------------- |
|
|
Kibor |
Отправлено: 25 Мая, 2018 - 04:37:48
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Получение помощи непосредственно в программе Кибор
Цитата: int xbase[1];//îáúÿâèë
int ybase[1];//îáúÿâèë
int bloknot[47][50];
start_();
outofbase_();
function start_()
{
getdisplay(32, 1920, 1080); //ïîìåíÿë. åñòü êàêàÿ òî âñòðîåííàÿ ãëîáàëüíàÿ ïåðåìåííàÿ, ÷òîáû âûä¸ðãèâàòü ðàçðåøåíèå ýêðàíà?
load_image_();
pause(1000);
}
function outofbase_()
{
pause(200);
findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], 0, 0, 1920, 1080, 20, 20, 20, 20, 20, 20, 100, 1, -1);
pause(200);
string xy=format(xbase[0])+" "+ybase[0]);
mousemove(xbase[0], ybase[0]);
messagebox(xy);
pause(100);
}
}
function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\ikonka.bmp");
} |
|
|
Junior |
Отправлено: 25 Мая, 2018 - 06:35:03
|
Прохожий
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2018
Репутация: 0
|
Прожал ссылку для получения "справки"
Цитата: Работа с системой.
Для определения параметров экрана можно воспользоваться функцией getdisplay:
getdisplay(color, x, y);
Все параметры имеют тип int.
В первый записывается глубина цвета.
Во второй разрешение экрана по горизонтали.
В третий разрешение экрана по вертикали.
В случае ошибки возвращает 0. В случае удачного определения 1.
Отсюда я понимаю, что эта функция нужна чтобы получить параметры экрана, однако дальше идёт заполнение параметров функции, т.е. я должен вбить 3 цифры, но какие надо вбивать? Разрешение экрана моего монитора в настоящий момент, область экрана, которую я хочу проверить, размер клиентского окна, к которому привязан бот? Т.е. это уже в любом случае не определение параметров экрана, а сравнение с заданными в функции параметрами. Хорошо, вбиваю CODE:getdisplay(8, 1920, 1080); Цифры брал так: правой кнопкой мыши жмакаю по рабочему столу, параметры экрана, дополнительные параметры, вижу там данные: разрядность 8-bit(но даже если ставить другие, результат не меняется), разрешение и активное разрешение 1920х1080. Делаю проверку:
CODE:int dspl=getdisplay(8, 1920, 1080);
string splstr=format(dspl);
messagebox(splstr);
В случае совпадения должно выйти сообщение с единичкой, однако выходит это:
Цитата:
---------------------------
Kibor
---------------------------
-842150451
---------------------------
ОК
---------------------------
То же число, кстати, выдаёт и при выводе xbase и ybase
1. Мне не понятно как работать с этой функцией, нет элементарного 2-3 строчного примера, 100% срабатывающего, чтобы воткнуть себе и поиграть/понять как оно устроено.
2. В моей проблеме с нахождением картинки эта функция играет какую то роль, файндимайдж сильно завязана на гетдисплей? Либо же она сугубо проверочная и на данном этапе в моём случае она(getdisplay) не нужна?
По поводу запятой полностью согласен, балбес невнимательный.(Отредактировано автором: 25 Мая, 2018 - 06:37:13) |
|
|
Kibor |
Отправлено: 25 Мая, 2018 - 10:45:03
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Junior пишет: Мы друг друга по-моему совершенно не понимаем.
Это вы не понимаете открытых указаний на ошибку.
Junior пишет: возвращает -842150451.
Потому что у вас в getdisplay ошибка, о чем неоднократно уже говорилось тут.
Исправьте ее и будет как надо.
Junior пишет: На сколько нужна getdisplay(); и нужна ли она вообще при использовании findimage();
Справку читали по getdisplay и findimage?
В findimage надо указывать зону поиска. Если она весь экран, то getdisplay позволяет узнать разрешение экрана данного компьютера. И будет работать на любом разрешение без переделки самого скрипта. |
|
|
|