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

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

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

> Описание: Поиск по картинки
Arimor
Отправлено: 30 Сентября, 2020 - 20:15:42
Post Id



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


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




Суть скрипта указать координаты по которым сделать картинку и потом навести на неё мышку.
Проблема 1: Не верно делает скриншот по полученным координатам от getmouse. Как это исправить? Я в чем то ошибся или это баг?
Проблема 2: Очень долго ищет картинку которую сохранил в скриншот, ешё может зависнуть, как это можно ускорить?

CODE:
int x[10], y[10],c, x1, y1,a;
int Image [10][100][100];
int PosX, PosY;
///////////////////////
getdisplay(c, x1, y1);
textbkcolor(255, 16637860);
///////////////////////

textout(0, 100, 100, "Координаты картинки, нажать Q", 1);
while(getkeystate(81)==0)sleep(10);
getmouse(x[0], y[0]);
sleep(1000);
textout(0, 100, 100, "Координаты картинки 2, нажать Q", 1);
while(getkeystate(81)==0)sleep(10);
getmouse(x[1], y[1]);
sleep(1000);
savescreen("C:\savescreen\1.bmp", x[0], y[0], x[1], y[1], -1);
loadimage (#Image [1][0][0], "C:\savescreen\1.bmp");
sleep(1000);

if (findimage(1, #Image[1][0][0], 0, #PosX, #PosY, 0, 0, x1, y1, 20, 50, 50, 70, 10, 20, 33, 1, -1)==1)
{
mousemove(PosX, PosY);
sleep(600);
}
else messagebox("Что-то пошло не так");
 
 Top
Zireael
Отправлено: 01 Октября, 2020 - 02:43:09
Post Id



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


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Не верно делает скриншот по полученным координатам от getmouse. Как это исправить?

В параметрах экрана выставить масштаб 100%.
 Цитата:
Очень долго ищет картинку

Точность 33% поэтому и ищёт долго.
 
 Top
Arimor
Отправлено: 01 Октября, 2020 - 12:23:10
Post Id



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


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




 Zireael пишет:
В параметрах экрана выставить масштаб 100%.
Спасибо! Точно, а есть готовые формулы по которым можно погрешность исправить? При масштабе 150%? В математике не селен. И возможно ли определить маштаб?
 
 Top
Zireael
Отправлено: 01 Октября, 2020 - 12:27:11
Post Id



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


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
При масштабе 150%?

Работать будет только при 100%.
 
 Top
Arimor
Отправлено: 01 Октября, 2020 - 12:55:34
Post Id



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


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




 Zireael пишет:
 Цитата:
При масштабе 150%?

Работать будет только при 100%.


Разобрался что нужно сделать, вот так работает при 150%. x[0]*1.5

CODE:
int x[10], y[10],c, x1, y1,a;
int Image [10][100][100];
int PosX, PosY;
///////////////////////
getdisplay(c, x1, y1);
textbkcolor(255, 16637860);
///////////////////////

textout(0, 100, 100, "Координаты картинки, нажать Q", 1);
while(getkeystate(81)==0)sleep(10);
getmouse(x[0], y[0]);
sleep(1000);
textout(0, 100, 100, "Координаты картинки 2, нажать Q", 1);
while(getkeystate(81)==0)sleep(10);
getmouse(x[1], y[1]);
sleep(1000);
savescreen("C:\savescreen\1.bmp", x[0]*1.5, y[0]*1.5, x[1]*1.5, y[1]*1.5, -1);
loadimage (#Image [1][0][0], "C:\savescreen\1.bmp");
sleep(1000);

if (findimage(1, #Image[1][0][0], 0, #PosX, #PosY, 0, 0, x1, y1, 1, 1, 1, 1, 1, 1, 90, 1, -1)==1)
{
mousemove(PosX/1.5, PosY/1.5);
sleep(600);
}
else messagebox("Что-то пошло не так");



Но вот как определить маштаб экрана?
 
 Top
Zireael
Отправлено: 01 Октября, 2020 - 13:21:20
Post Id



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


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
как определить маштаб экрана?

CODE:
#define MONITOR_DEFAULTTONEAREST 2
#define MDT_EFFECTIVE_DPI 0
external(INT, "GetDpiForMonitor", "GetDpiForMonitor", "Shcore.dll");
external(INT, "MonitorFromPoint", "MonitorFromPoint", "User32.dll");

int dpiX, dpiY;
GetDpiForMonitor(MonitorFromPoint(1, 1, MONITOR_DEFAULTTONEAREST), MDT_EFFECTIVE_DPI, address(#dpiX), address(#dpiY));
messagebox(dpiX/96);
 
 Top
Arimor
Отправлено: 01 Октября, 2020 - 13:34:00
Post Id



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


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




Zireael , У меня показывает в месседж боксе "1" при любом маштабе. Совсем не понимаю как с этим работать, можно подробнее? Может у меня монитор не такой?
Так тоже 1 показывает
CODE:
getdisplay(c, x1, y1);
GetDpiForMonitor(MonitorFromPoint(x1, y1, MONITOR_DEFAULTTONEAREST), MDT_EFFECTIVE_DPI, address(#dpiX), address(#dpiY));

(Отредактировано автором: 01 Октября, 2020 - 13:34:53)

 
 Top
Zireael
Отправлено: 01 Октября, 2020 - 14:49:40
Post Id



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


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
показывает в месседж боксе "1" при любом маштабе.

Не знаю, у меня показывает 1.25 при 125%, 1.5 при 150%.
 
 Top
Kibor
Отправлено: 01 Октября, 2020 - 15:04:41
Post Id



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


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




Shcore.dll на 7 не работает.
По крайне мере отсутствует по умолчанию.
 
 Top
Arimor
Отправлено: 01 Октября, 2020 - 15:15:39
Post Id



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


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




 Zireael пишет:
Не знаю, у меня показывает 1.25 при 125%, 1.5 при 150%.


Так тоже показывает 1 если ддл отключить
CODE:
#define MONITOR_DEFAULTTONEAREST 2
#define MDT_EFFECTIVE_DPI 0
//external(INT, "GetDpiForMonitor", "GetDpiForMonitor", "Shcore.dll");
//external(INT, "MonitorFromPoint", "MonitorFromPoint", "User32.dll");

int dpiX, dpiY;
GetDpiForMonitor(MonitorFromPoint(1, 1, MONITOR_DEFAULTTONEAREST), MDT_EFFECTIVE_DPI, address(#dpiX), address(#dpiY));
messagebox(dpiX/96);


 Kibor пишет:
Shcore.dll на 7 не работает.
По крайне мере отсутствует по умолчанию.

У меня win 10, посмотрел в систем 32, файл на месте.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 4 (гостей: 4, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by