Я использую этот код для захвата окна процесса в фоновом режиме:
IntPtr = Process.GetProcessByName("memu")[0].MainWindowHandle;
RECT rc;
GetClientRect(hwnd, out rc);
IntPtr hdcFrom = GetDC(hwnd);
IntPtr hdcTo = CreateCompatibleDC(hdcFrom);
int Width = rc.right;
int Height = rc.bottom;
Bitmap bmp = null;
IntPtr hBitmap = CreateCompatibleBitmap(hdcFrom, Width, Height);
if (hBitmap != IntPtr.Zero) {
IntPtr hLocalBitmap = SelectObject(hdcTo, hBitmap);
BitBlt(hdcTo, 0, 0, Width, Height, hdcFrom, 0, 0, CopyPixelOperation.SourceCopy);
SelectObject(hdcTo, hLocalBitmap);
DeleteDC(hdcTo);
ReleaseDC(hwnd, hdcFrom);
bmp = Image.FromHbitmap(hBitmap);
DeleteObject(hBitmap);
return bmp;
}
Этот код захватывает эмулятор Android под названием MEmu, он использует DirectX для рендеринга контента. Но этот код перестает работать после обновления Windows 10 до версии 16299 (он работал обычно раньше), он все еще работает в Windows 7 с включенным режимом Aero.
Когда я использую этот метод в Windows 10 Pro v16299.X, он просто возвращает белое изображение или возвращает экран загрузки "эмулятор", а не текущее содержимое. В Windows 7, если я удалю режим Aero, он будет действовать одинаково, захватив "экран загрузки", поэтому выглядит так, как изменилось прозрачность в новом обновлении Windows 10 pro.
Я пробовал все, попробовал установить некоторые модули, чтобы заставить Aero Mode работать в Windows 10, попробовал PrintWindow, чтобы захватить экран в фоновом режиме, но все тот же.
Любые идеи, что может произойти? Или возможное решение? Или что изменилось в этой последней версии Windows 10 Pro, которая может сломать этот код?
Спасибо!