首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SlimDX捕获全屏游戏的C#

用SlimDX捕获全屏游戏的C#
EN

Stack Overflow用户
提问于 2011-09-02 11:26:33
回答 1查看 5.5K关注 0票数 2

我最近做了一个可以截取游戏截图的应用程序。

首先,我使用GDI来捕获游戏,但为此,我不得不在win7/vis上禁用aero,并且我在windows XP上遇到了一些问题。

然后我决定使用DirectX,在意识到微软的DX不适合我之后,我找到了一个SlimDX屏幕捕获(http://spazzarama.wordpress.com/2009/02/07/screencapture-with-direct3d/)的很好的例子。

SlimDX工作得很好!它甚至允许我在不禁用win7/vis上的aero的情况下捕获游戏。

唯一的问题是-当我将游戏切换到全屏时,我得到了"D3DERR_DEVICELOST: Device lost (-2005530520)“。

有没有人能推荐一种定制代码的方法,让它捕获全屏应用程序?

注意:我已经有一个方法可以确定游戏是全屏的还是窗口的。

我更改了这一行:

代码语言:javascript
运行
复制
bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp, new Rectangle(region.Left, region.Top, region.Width, region.Height)));

要这样做:

代码语言:javascript
运行
复制
bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-02 12:50:59

当Direct3D设备进入全屏模式时,它被授予对视频卡的独占访问权限。来自the MSDN documentation

当Direct3D对象采用独占模式时,除全屏设备外的所有设备都将置于丢失状态。

我不认为有任何方法可以让你的技术在另一个应用程序进入全屏独占模式后截屏。我的理解是,其他检索全屏表面状态的应用程序(即视频录制程序等)是通过将自己的代码注入到Direct3D库中来实现的。这是一项非常重要的工作;如果您对此感兴趣,可以尝试搜索"directx代码注入“或类似的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7278944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档