求DX(DirectX)窗口后台截图方法或思路

假设我要截取梦幻西游的截图(是后台的,不是前台的.直接截图前台会被其他窗口阻挡)..........我说的不是截图软件,是编程方式垃圾百度选错分类Julian99说的是前... 假设我要截取梦幻西游的截图(是后台的,不是前台的.直接截图前台会被其他窗口阻挡)
..........我说的不是截图软件,是编程方式
垃圾百度 选错分类
Julian99 说的是前台截图
展开
 我来答
纳兰云惠
推荐于2016-04-03 · TA获得超过965个赞
知道小有建树答主
回答量:514
采纳率:50%
帮助的人:103万
展开全部

首先看一下截屏用到的函数,最核心的当然是D3DXSaveSurfaceToFile,先看下函数原型

第一个参数是指向设备的指针,不多说啦

第二个参数是截图文件的类型,支持的类型还不少,主要有下面这些

BMP,JPG,TGA,PNG,DDS,PPM,DIB,HDR,PFM

这里我们使用BMP-即位图格式

第三个参数是指向Surface的指针,也就是保存了截图数据的表面

第四个参数是Surface的调色板,这里不使用,设置为NULL

最后一个参数是Surface的矩形区域,也就是我们可以只截取Surface上某一矩形区域的数据,其实截取全屏和截取窗口的差别也就在这个参数的设置上

其他的函数在下面会逐一讲解

现在来定义我们的截屏函数,首先我们需要一个设备指针,因为在DX中,任何操作都与设备密切相关,所以设备指针几乎是每个DX函数都要用到的参数,我们这个函数也不例外,其次需要一个窗口句柄,当我们截取窗口时,把窗口句柄传入,当我们截取整个屏幕时,直接传入NULL。最后我们需要一个字符串参数来指定截图对应的文件名,如下


详细步骤:

首先我们需要获取显示模式,注意这里获取的是显卡的显示模式,而不是设备的显示模式,因为设备的显示模式既有窗口模式,也有全屏模式,所以它的分辨率是不确定的,而显卡的显示模式返回的始终是最大分辨率,我们需要创建整个屏幕区域对应的Surface,当截取整个屏幕时,直接保存即可,当截取窗口时,我们将窗口所对应的区域保存即可

获取显卡显示模式的代码如下

那么如何实现任意区域截屏呢,我想大家已经想到了,假设使用鼠标拖拽的方法截图,记下鼠标按下和抬起时的坐标,构造一个RECT,然后传递给D3DXSaveSurfaceToFile函数就可以了,需要注意到是,由于鼠标拖拽到方向是任意的,所以在构造RECT的时候要注意right < left或者bottom < top 的情况,用下面的方法可以处理。

AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
Julian99
2011-02-17 · TA获得超过1221个赞
知道小有建树答主
回答量:1194
采纳率:0%
帮助的人:1198万
展开全部
你要是截取屏幕截图的话其实很简单,在游戏即使是全屏的情况下,你可以按键盘上的Prnt Scrn 键,即可保留当前的屏幕画面,操作步骤是,先打开windows自带的画图软件,在要截取的游戏画面中按下Prnt Scrn 键,然后最好停留一两秒钟,等待图像被完整截取后,按Atl+Tab键切换回画图软件,然后直接粘贴即可,最好将图像保存为BMP格式,这样会保存一个高清晰度的全屏画面。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaoxy2000
2012-07-02
知道答主
回答量:1
采纳率:0%
帮助的人:2.7万
展开全部
经过2个月 查阅了大量老外的博客 已经能对directx窗口后台截图 利用api hook 可以对directx窗口截图,窗口移动到屏幕外,或者showwindow(hwnd, sw_hide) 都能录到,窗口最小化是不行的 。在网上查阅到的2-3个例子都是需要在本程序使用DetourCreateProcessWithDll之类的,由本程序启动需要截屏的directx程序,截获Direct3DCreate9 得到Direct3D对象的接口指针 -》CreateDevice 得到d3ddevice 这样局限性比较大。我的程序可以直接挂钩已经在执行的进程,直接截屏。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e637131b8
2011-02-18 · TA获得超过185个赞
知道答主
回答量:28
采纳率:0%
帮助的人:21.6万
展开全部
发撒旦发射点发
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
932877715
2011-02-17 · 超过11用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:31.6万
展开全部
Ctrl+Alt+A
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式