Код работает нормально, если целевая игра работает в версии, установленной из Windows App Store. Игра представляет собой порт из игры для Android, и версия Windows больше не получает обновлений, поэтому я хочу запустить версию Android, более новую, с использованием BlueStacks на моем ПК.
Это код, который работает с родной Windowsверсия игры.
public GameWindow(int titleHeight)
{
GetGameWindow();
TitleHeight = titleHeight;
}
private void GetGameWindow()
{
Form1.Rect rectangle = default(Form1.Rect);
IntPtr intPtr = FindWindow("ApplicationFrameWindow", "Game Window");
SetForegroundWindow(intPtr);
GetWindowRect(intPtr, ref rectangle);
top = rectangle.Top;
left = rectangle.Left;
width = rectangle.Right - rectangle.Left;
height = rectangle.Bottom - rectangle.Top;
UIClass.ClickBar(this);
}
public void BringToFront()
{
IntPtr foregroundWindow = FindWindow("ApplicationFrameWindow", "Game Window");
SetForegroundWindow(foregroundWindow);
}
public Bitmap Capture()
{
Bitmap bitmap = new Bitmap(Width, Height);
Rectangle rectangle = new Rectangle(Left, Top, width, height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(rectangle.Left, rectangle.Top), Point.Empty, rectangle.Size);
}
return bitmap;
}
public void Capture(string path)
{
Bitmap bitmap = new Bitmap(Width, Height);
Rectangle rectangle = new Rectangle(Left, Top, width, height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(rectangle.Left, rectangle.Top), Point.Empty, rectangle.Size);
}
bitmap.Save(Path.Combine(path, "UT" + DateTime.Now.Ticks.ToString() + ".jpg"));
bitmap.Dispose();
}
}
}
Это то, что я пытался развернуть до дочернего окна "
public GameWindow(int titleHeight)
{
GetGameWindow();
TitleHeight = titleHeight;
}
private void GetGameWindow()
{
Form1.Rect rectangle = default(Form1.Rect);
IntPtr intPtr = FindWindow("HwndWrapper[Bluestacks.exe;;310d8add-fc43-4c3e-a64b-2cd5f6d0618c]", "BlueStacks");
SecondBSWin = FindWindowEx(intPtr, IntPtr.Zero, "WindowsForms10.Window.8.app.0.34f5582_r6_ad1", "BlueStacks Android PluginAndroid");
ThirdBSWin = FindWindowEx(SecondBSWin, IntPtr.Zero, "WindowsForms10.EDIT.app.0.34f5582_r6_ad1", null);
ForthBSWin = FindWindowEx(ThirdBSWin, IntPtr.Zero, "BlueStacksApp", "_ctl.Window");
SetForegroundWindow(ForthBSWin);
GetWindowRect(ForthBSWin, ref rectangle);
top = rectangle.Top;
left = rectangle.Left;
width = rectangle.Right - rectangle.Left;
height = rectangle.Bottom - rectangle.Top;
UIClass.ClickBar(this);
}
public void BringToFront()
{
IntPtr foregroundWindow = FindWindow("HwndWrapper[Bluestacks.exe;;edc30241-e5fe-4f1b-a9ae-8fcca64ba7b9]", "BlueStacks");
SetForegroundWindow(foregroundWindow);
SecondBSWin = FindWindowEx(foregroundWindow, IntPtr.Zero, "WindowsForms10.Window.8.app.0.34f5582_r6_ad1", "BlueStacks Android PluginAndroid");
ThirdBSWin = FindWindowEx(SecondBSWin, IntPtr.Zero, "WindowsForms10.EDIT.app.0.34f5582_r6_ad1", null);
ForthBSWin = FindWindowEx(ThirdBSWin, IntPtr.Zero, "BlueStacksApp", "_ctl.Window");
}
public Bitmap Capture()
{
Bitmap bitmap = new Bitmap(Width, Height);
Rectangle rectangle = new Rectangle(Left, Top, width, height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(rectangle.Left, rectangle.Top), Point.Empty, rectangle.Size);
}
return bitmap;
}
public void Capture(string path)
{
Bitmap bitmap = new Bitmap(Width, Height);
Rectangle rectangle = new Rectangle(Left, Top, width, height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(rectangle.Left, rectangle.Top), Point.Empty, rectangle.Size);
}
bitmap.Save(Path.Combine(path, "UT" + DateTime.Now.Ticks.ToString() + ".jpg"));
bitmap.Dispose();
}
}
}
Весь проект отлично работает на родной версии Windows, все, что у меня естьПока что все, что нужно сделать, это настроить программу на использование окна BlueStacks. Я могу настроить эмулятор BlueStacks на использование OpenGL или DircetX, так как это «Engine», это не имеет никакого значения. Я также пытался использовать эмулятор MeMu, ноЯ получаю те же результаты.
Когда я проверяю цвет пикселя в точке x, y, где я хочу взаимодействовать с игрой, он показывает черный цвет вместо фактического зеленого цвета. Я нашел много других вопросов, которые получаличерные экраны возвращаются после аналогичных операций, не уверен, что здесь та же проблема.
Буду признателен за любуюпредложений, поскольку я много искал и пока не нашел ответа.
Обновлено, чтобы показать дочернее окно.
Вот что показывает Spy ++, "" _ctl.Window "BlueStacksApp"это окно, которое я ищу.