Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Помогите понять в чем ошибка и как ускорить код?

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

1. Arimor - 30 Сентября, 2020 - 12:15:42 - перейти к сообщению
Суть скрипта указать координаты по которым сделать картинку и потом навести на неё мышку.
Проблема 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("Что-то пошло не так");
2. Zireael - 30 Сентября, 2020 - 18:43:09 - перейти к сообщению
 Цитата:
Не верно делает скриншот по полученным координатам от getmouse. Как это исправить?

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

Точность 33% поэтому и ищёт долго.
3. Arimor - 01 Октября, 2020 - 04:23:10 - перейти к сообщению
 Zireael пишет:
В параметрах экрана выставить масштаб 100%.
Спасибо! Точно, а есть готовые формулы по которым можно погрешность исправить? При масштабе 150%? В математике не селен. И возможно ли определить маштаб?
4. Zireael - 01 Октября, 2020 - 04:27:11 - перейти к сообщению
 Цитата:
При масштабе 150%?

Работать будет только при 100%.
5. Arimor - 01 Октября, 2020 - 04:55:34 - перейти к сообщению
 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("Что-то пошло не так");



Но вот как определить маштаб экрана?
6. Zireael - 01 Октября, 2020 - 05:21:20 - перейти к сообщению
 Цитата:
как определить маштаб экрана?

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);
7. Arimor - 01 Октября, 2020 - 05:34:00 - перейти к сообщению
Zireael , У меня показывает в месседж боксе "1" при любом маштабе. Совсем не понимаю как с этим работать, можно подробнее? Может у меня монитор не такой?
Так тоже 1 показывает
CODE:
getdisplay(c, x1, y1);
GetDpiForMonitor(MonitorFromPoint(x1, y1, MONITOR_DEFAULTTONEAREST), MDT_EFFECTIVE_DPI, address(#dpiX), address(#dpiY));
8. Zireael - 01 Октября, 2020 - 06:49:40 - перейти к сообщению
 Цитата:
показывает в месседж боксе "1" при любом маштабе.

Не знаю, у меня показывает 1.25 при 125%, 1.5 при 150%.
9. Kibor - 01 Октября, 2020 - 07:04:41 - перейти к сообщению
Shcore.dll на 7 не работает.
По крайне мере отсутствует по умолчанию.
10. Arimor - 01 Октября, 2020 - 07:15:39 - перейти к сообщению
 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, файл на месте.

Powered by ExBB FM 1.0 Final