我有一个非常需要图形的应用程序,它是基于DirectX和Windows窗体构建的。它具有一个自动化和重播框架,围绕该框架构建了一个自动化测试系统。不幸的是,当测试在夜间构建过程中无人看管时,显示器处于非活动状态或与屏幕保护程序捆绑在一起,并且我们的IT安全策略不允许我们禁用它。

所以我的问题是:有没有办法对不带显示的运行应用程序进行“屏幕”捕获?我想确保使用图形卡,以便渲染通道相同,但是测试框架不需要关心显示器的状态。

任何帮助都万分感谢!

最佳答案

由于提到了渲染管道,因此我假设您正在使用Direct3d,如果这样,则可以保存帧的后缓冲区。我还在使用VB.Net + MDX时就这样做了

Dim tempSurface As Direct3D.Surface
tempSurface = device.GetBackBuffer(0, 0, Direct3D.BackBufferType.Mono)
Direct3D.SurfaceLoader.Save(tempFilename, Direct3D.ImageFileFormat.Png, tempSurface)


您可以轻松地转换为自己选择的任何编程语言,基本上是在调用Direct3d的API。不过,您需要将backbuffer和Present参数配置为

' Need to use flip to enable screen capture
presentParams.SwapEffect = Direct3D.SwapEffect.Flip
presentParams.PresentationInterval = Direct3D.PresentInterval.One

关于winforms - Windows窗体:非图形运行时的屏幕截图(即屏幕保护程序处于事件状态),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/183118/

10-11 00:42