Arimor |
Отправлено: 30 Сентября, 2020 - 20:15:42
|
Мастер
Покинул форум
Сообщений всего: 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("Что-то пошло не так"); |
|
|
Zireael |
Отправлено: 01 Октября, 2020 - 02:43:09
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Не верно делает скриншот по полученным координатам от getmouse. Как это исправить?
В параметрах экрана выставить масштаб 100%.
Цитата: Очень долго ищет картинку
Точность 33% поэтому и ищёт долго. |
|
|
Arimor |
Отправлено: 01 Октября, 2020 - 12:55:34
|
Мастер
Покинул форум
Сообщений всего: 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("Что-то пошло не так");
Но вот как определить маштаб экрана? |
|
|
Zireael |
Отправлено: 01 Октября, 2020 - 13:21:20
|
Эксперт
Покинул форум
Сообщений всего: 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); |
|
|
Arimor |
Отправлено: 01 Октября, 2020 - 13:34:00
|
Мастер
Покинул форум
Сообщений всего: 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) |
|
|
Arimor |
Отправлено: 01 Октября, 2020 - 15:15:39
|
Мастер
Покинул форум
Сообщений всего: 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, файл на месте. |
|
|
|