捕获窗口图像的常规方法是调用:
HDC SharedWndDC = GetWindowDC(SharedWnd);
BitBlt(BitmapDC, 0, 0, width, height, SharedWndDC, 0, 0, SRCCOPY /* |CAPTUREBLT */);
ReleaseDC(SharedWnd, SharedWndDC);
在运行DWM的系统上,可以很好地抓取所需的窗口,即使它被其他窗口重叠或部分离屏等情况。但是,在某些窗口上(可能是使用WPF的窗口),它不能正常工作,并且会对玻璃区域进行奇怪的处理。基本上,GDI捕获无法在非GDI对象上工作。
我理解我真正想要的是抓取Direct3D的“后台缓冲区”或“前台缓冲区”,但我看到的众多示例都是用于捕获整个屏幕或桌面。由于不了解Direct3D,我找不到一个现有窗口的正确对象的示例或简单说明,然后我可以从中获取缓冲区。
有没有善良的人至少能展示一下这个缺失的部分?
——John