Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Черный экран (при выборе окна) LDPlayer

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

11. Zireael - 14 Октября, 2020 - 17:45:46 - перейти к сообщению
 Цитата:
Вы уверены, что поиск изображений в фоновом режиме применим к 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("Окно не найдено");
12. dulger - 15 Октября, 2020 - 16:05:33 - перейти к сообщению
 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.
13. Zireael - 15 Октября, 2020 - 17:34:50 - перейти к сообщению
 Цитата:
не находит картинку

Во вкладке графика отображается изображение с эмулятора?
14. dulger - 15 Октября, 2020 - 23:54:02 - перейти к сообщению
 Zireael пишет:
 Цитата:
не находит картинку

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


Нет конечно. LDPlayer работает на OpenGL. Поэтому я и спрашивал уверенны ли вы, что данный пример применим к LDPlayer. Я не понимаю, почему данную проблему до сих пор ещё не решили ибо боты на андроид сейчас очень актуальны. Использовать голимый NOX, который не работает с большинством играми в режиме Directx, вообще не вариант.
15. Zireael - 16 Октября, 2020 - 03:20:21 - перейти к сообщению
 Цитата:
LDPlayer работает на OpenGL.

И что?

Настройки стандартные, ничего не менял.
16. dulger - 16 Октября, 2020 - 04:46:50 - перейти к сообщению
 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);
}


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

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

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

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

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


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

Может быть у меня что не так с виндой? Странно, очень странно. Аж руки опускаются Недовольство, огорчение
19. Zireael - 16 Октября, 2020 - 06:02:37 - перейти к сообщению
Возможно какие-то настройки в эмуляторе меняли. Я ничего не менял, какие были после установки эмулятора, те и стоят.
20. dulger - 16 Октября, 2020 - 06:04:15 - перейти к сообщению
 Zireael пишет:
Возможно какие настройки в эмуляторе меняли. Я ничего не менял, какие были после установки эмулятора, те и стоят.


В том-то и дело что всё по дефолту
(Добавление)
Запустил на другом компьютере и всё заработало. Странно конечно.

Powered by ExBB FM 1.0 Final