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

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

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

> Описание: Проблема с созданием макроса
Zireael
Отправлено: 15 Октября, 2020 - 01:45:46
Post Id



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


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




 Цитата:
Вы уверены, что поиск изображений в фоновом режиме применим к LDPlayer?

Да. Т. к. содержимое окна отображается во вкладке графика.
 Цитата:
Подскажи пример хотя бы.

CODE:
int Image_0[87][29];
loadimage (#Image_0[0][0], "D:\Kibor2\Image_0.bmp");


int PosX, PosY;

win w = window ("LDPlayer", "LDPlayerMainFrame", -1);
if(w)
{
if(findimage(1, #Image_0[0][0], 0, #PosX, #PosY, 0, 0, 1920, 1080, w))
{
messagebox("Картинка найдена в координатах:^r^nX = "+format(PosX)+"^r^nY = "+format(PosY));
mousemove(PosX, PosY, w);
}
else messagebox("Картинка найдена");
}
else messagebox("Окно не найдено");
 
 Top
dulger
Отправлено: 16 Октября, 2020 - 00:05:33
Post Id



Пользователь
Участник


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




 Zireael пишет:
 Цитата:
Вы уверены, что поиск изображений в фоновом режиме применим к LDPlayer?

Да. Т. к. содержимое окна отображается во вкладке графика.
 Цитата:
Подскажи пример хотя бы.

CODE:
int Image_0[87][29];
loadimage (#Image_0[0][0], "D:\Kibor2\Image_0.bmp");


int PosX, PosY;

win w = window ("LDPlayer", "LDPlayerMainFrame", -1);
if(w)
{
if(findimage(1, #Image_0[0][0], 0, #PosX, #PosY, 0, 0, 1920, 1080, w))
{
messagebox("Картинка найдена в координатах:^r^nX = "+format(PosX)+"^r^nY = "+format(PosY));
mousemove(PosX, PosY, w);
}
else messagebox("Картинка найдена");
}
else messagebox("Окно не найдено");


Странно... Попробовал сегодня ваш пример и у меня не находит картинку. Пробовал тестить на win 10.
 
 Top
Zireael
Отправлено: 16 Октября, 2020 - 01:34:50
Post Id



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


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




 Цитата:
не находит картинку

Во вкладке графика отображается изображение с эмулятора?
 
 Top
dulger
Отправлено: 16 Октября, 2020 - 07:54:02
Post Id



Пользователь
Участник


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




 Zireael пишет:
 Цитата:
не находит картинку

Во вкладке графика отображается изображение с эмулятора?


Нет конечно. LDPlayer работает на OpenGL. Поэтому я и спрашивал уверенны ли вы, что данный пример применим к LDPlayer. Я не понимаю, почему данную проблему до сих пор ещё не решили ибо боты на андроид сейчас очень актуальны. Использовать голимый NOX, который не работает с большинством играми в режиме Directx, вообще не вариант.

(Отредактировано автором: 16 Октября, 2020 - 07:59:31)

 
 Top
Zireael
Отправлено: 16 Октября, 2020 - 11:20:21
Post Id



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


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




 Цитата:
LDPlayer работает на OpenGL.

И что?

Настройки стандартные, ничего не менял.
 
 Top
dulger
Отправлено: 16 Октября, 2020 - 12:46:50
Post Id



Пользователь
Участник


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




 Zireael пишет:
 Цитата:
LDPlayer работает на OpenGL.

И что?

Настройки стандартные, ничего не менял.


Это вы сканируете весь рабочий стол естественно изображение LDPlayera присутствует.
Но когда вы пытаетесь искать:
win w = window ("LDPlayer", "LDPlayerMainFrame", -1);
То вы уже ищете в окне самого LDPlayera а там уже совсем другая картина. вы видите окно запуска LDPlayera но не то что вам нужно. А задача стоит в том, что бы поиск картинок работал в перекрытых окнах LDPlayera. Поставьте галочку Окно и сами всё увидите. Я бьюсь с этим уже месяц и не могу найти решения, которое бы работало Недовольство, огорчение
(Добавление)
Вот использовал ваш код для проверки:

CODE:
#define SRCCOPY 13369376
#define WS_EX_TRANSPARENT 32
#define WS_EX_LAYERED 524288
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define LWA_COLORKEY 1
#define COLOR_3DFACE 15
#define FALSE 0
#define UnitPixel 2

external(INT, "GdiplusStartup", "GdiplusStartup", "Gdiplus.dll");
external(INT, "GdiplusShutdown", "GdiplusShutdown", "Gdiplus.dll");
external(INT, "GdipDisposeImage", "GdipDisposeImage", "Gdiplus.dll");
external(INT, "GdipCreateFromHWND", "GdipCreateFromHWND", "Gdiplus.dll");
external(INT, "GdipDeleteGraphics", "GdipDeleteGraphics", "Gdiplus.dll");
external(INT, "GdipCreateBitmapFromHBITMAP", "GdipCreateBitmapFromHBITMAP", "Gdiplus.dll");
external(INT, "GdipDrawImageRectRectI", "GdipDrawImageRectRectI", "Gdiplus.dll");

external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "DeleteDC", "DeleteDC", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll");
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll");
external(INT, "BitBlt", "BitBlt", "Gdi32.dll");

external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetSysColor", "GetSysColor", "User32.dll");
external(INT, "MoveWindow", "MoveWindow", "User32.dll");



win w=window ("LDPlayer", "LDPlayerMainFrame", -1); // окно, с которого выводить изображение
if(w==0)
{
messagebox("Окно не найдено");
}
else
{
int gdiplusToken;
char gdiplusStartupInput[16];
initialarray(#gdiplusStartupInput[0], 0);
writeaddress(1, address(#gdiplusStartupInput[0]));
GdiplusStartup(address(#gdiplusToken), address(#gdiplusStartupInput[0]), 0);



createdialog(0);
showdialog(0, "Dialog", 0, 0, 0, 0, 1, 1);


int coord[4]={0, 0, 1000, 700}; // координаты
int percent = 50; // процент вывода

visualwindow(0, coord[0], coord[1], coord[2], coord[3], 650, 400, percent, w);
looptime(5000)
{
// 0-3 рамка захвата, 4-5 позиция вывода, 6 процент вывода, окно
visualwindow2(coord[0], coord[1], coord[2], coord[3], 50, 400, percent, w);
sleep(1);
}

GdiplusShutdown(gdiplusToken);
}



function getmessage(0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
SetWindowLong(gethwnd(0), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(0), GetSysColor(COLOR_3DFACE), 0, LWA_COLORKEY);
}



function visualwindow2(int sx, int sy, int ex, int ey, int posX, int posY, int percent, win window_)
{
int width = ex-sx;
int height = ey-sy;

// получить скрин окна
int hScreen = GetDC(formatwi(window_));
int hDc = CreateCompatibleDC(hScreen);
int hBitmap = CreateCompatibleBitmap(hScreen, width, height);
int old_obj = SelectObject(hDc, hBitmap);
BitBlt(hDc, 0, 0, width, height, hScreen, sx, sy, SRCCOPY);

// изменить размер диалога
int w = width*percent/100;
int h = height*percent/100;
MoveWindow(gethwnd(0), posX, posY, w, h, FALSE);

// вывод на диалог
int bitmap;
int lnGraphics;
GdipCreateFromHWND(gethwnd(0), address(#lnGraphics));
GdipCreateBitmapFromHBITMAP(hBitmap, 0, address(#bitmap));
GdipDrawImageRectRectI(lnGraphics, bitmap, 0, 0, w, h, 0, 0, width, height, UnitPixel, 0, 0, 0);
GdipDisposeImage(bitmap);

// удаление ресурсов
SelectObject(hDc, old_obj);
DeleteObject(hBitmap);
DeleteDC(hDc);
ReleaseDC(formatwi(window_), hScreen);
GdipDeleteGraphics(lnGraphics);
}


Вы сами можете увидеть, что выводится на изображении.
 
 Top
Zireael
Отправлено: 16 Октября, 2020 - 13:45:44
Post Id



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


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




https://drive.google.com/file/d/...view?usp=sharing
В архиве видео. LDPlayer на втором рабочем столе, перейдя на первый рабочий стол запускаем скрипт, visualwindow выводит изображение с эмулятора. Естественно и findimage будет работать.
 Цитата:
Поставьте галочку Окно

Зачем? Если нужно получить изображение с окна в фоне, то галка должна быть контрол.
 Цитата:
Вы сами можете увидеть, что выводится на изображении.

Выводится изображение с эмулятора, при том что он на другом рабочем столе.
 
 Top
dulger
Отправлено: 16 Октября, 2020 - 13:58:45
Post Id



Пользователь
Участник


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




 Zireael пишет:
https://drive.google.com/file/d/...view?usp=sharing
В архиве видео. LDPlayer на втором рабочем столе, перейдя на первый рабочий стол запускаем скрипт, visualwindow выводит изображение с эмулятора. Естественно и findimage будет работать.
 Цитата:
Поставьте галочку Окно

Зачем? Если нужно получить изображение с окна в фоне, то галка должна быть контрол.
 Цитата:
Вы сами можете увидеть, что выводится на изображении.

Выводится изображение с эмулятора, при том что он на другом рабочем столе.


Странно, у меня совсем другая картина. Вот видео: Видео

Может быть у меня что не так с виндой? Странно, очень странно. Аж руки опускаются Недовольство, огорчение
 
 Top
Zireael
Отправлено: 16 Октября, 2020 - 14:02:37
Post Id



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


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




Возможно какие-то настройки в эмуляторе меняли. Я ничего не менял, какие были после установки эмулятора, те и стоят.

(Отредактировано автором: 16 Октября, 2020 - 14:04:06)

 
 Top
dulger
Отправлено: 16 Октября, 2020 - 14:04:15
Post Id



Пользователь
Участник


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




 Zireael пишет:
Возможно какие настройки в эмуляторе меняли. Я ничего не менял, какие были после установки эмулятора, те и стоят.


В том-то и дело что всё по дефолту
(Добавление)
Запустил на другом компьютере и всё заработало. Странно конечно.
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by