捕获窗口图像的常规方法是调用:
HDC SharedWndDC = GetWindowDC(SharedWnd);
BitBlt(BitmapDC, 0, 0, width, height, SharedWndDC, 0, 0, SRCCOPY /* |CAPTUREBLT */);
ReleaseDC(SharedWnd, SharedWndDC);
在运行 DWM 的系统上,它很好地抓住了有问题的窗口,即使它被其他窗口重叠或部分不在屏幕上,或者诸如此类。
但是,它在某些窗口(可能是使用 WPF 的窗口)上无法正常工作,并且对玻璃区域做了一些有趣的事情。基本上,GDI 捕获不适用于非 GDI 事物。
我知道我真正想要的是获取 Direct3D 的“后缓冲区”或“前缓冲区”,但我看到的许多示例都是用于捕获整个屏幕或桌面。不知道 Direct3D,我找不到一个示例或简单的语句来说明如何为现有窗口获取正确的对象,然后我可以从中获取缓冲区。
某个善良的灵魂至少可以显示出那个缺失的部分吗?
-约翰