BitBlt屏幕截图无法在Windows 10上运行

我正在使用此代码在后台捕获进程窗口:

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; } 

这段代码捕获了一个名为MEmu的Android模拟器,它使用DirectX来呈现内容。 但是这个代码在Windows 10更新到16299版之后停止工作(之前它正常工作),它仍然在启用了Aero模式的Windows 7上运行。

当我在Windows 10 Pro v16299.X中使用此方法时,它只返回一个白色图像,或者它返回模拟器“加载屏幕”,而不是正在运行的内容。 在Windows 7上,如果我删除Aero模式,它将采取相同的行动,捕获“加载屏幕”,因此看起来像新的Windows 10专业版更新中的透明度工作方式。

我已经尝试了一切,尝试安装一些模块以强制Aero Mode在Windows 10上运行,尝试使用PrintWindow在后台捕获屏幕,但仍然是相同的。

有什么想法会发生什么? 还是可能的解决方案? 或者在最后一个可能破坏该代码的Windows 10 Pro版本中发生了哪些变化?

谢谢!