我们有一个 C# (WPF) 应用程序,我们想在其中截取我们启动的任意应用程序的屏幕截图(即,我们有一个对我们启动的进程的引用)。应用程序可能被最小化或在其他窗口后面,但我们仍然只想要单个应用程序的图像,而不是重叠像素。
我知道使用 BitBlt 或PrintWindow的典型 P/Invoke 解决方案大部分时间都可以工作,但在处理直接绘制到图形设备的 DirectX 或 OpenGL 应用程序时,这些解决方案会失败(我只得到黑色/透明像素)。我发现这篇文章是关于从 C# 中截取 Direct3D 应用程序的屏幕截图,所以我想我已经涵盖了这个案例。
所以我的问题是:
- 我将如何为 OpenGL 应用程序执行此操作?
- 确定要使用的适当方法(PW/DX/GL)的最简单方法是什么?
- 有没有一种通用的方法可以做到这一点?
对于#2,我是否只能检查可执行文件加载的模块并查看是否加载了 DirectX 或 OpenGL DLL/Assembly?
这只需要在 Windows XP 上运行(不是跨平台的,如果有此应用程序,也不会很快进入 Vista/7)。