一种屏幕获取方法及系统技术方案

技术编号:15450491 阅读:107 留言:0更新日期:2017-05-31 12:14
本发明专利技术涉及计算机图像处理技术领域,尤其涉及一种屏幕获取方法及系统。本发明专利技术通过获取截图指令;加载截图模块至进程;所述进程为待截图画面所在窗口的进程;所述截图模块创建渲染设备;获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;设置所述显示函数的函数指针指向所述第二地址;设置所述第一函数的函数指针指向所述第一地址;执行所述显示函数,获取截取画面。实现无需重启待截图画面所在窗口的进程即可截取指定窗口的画面。

Method and system for acquiring screen

The invention relates to the technical field of computer image processing, in particular to a screen acquisition method and system. The present invention by acquiring screenshot instructions; loading screenshot module to the process to process; the screenshot of the window where the process of creating the rendering device; capture module; access to display entrance address of the function the rendering device in the first address; the display function is used to draw a good picture display in the background the current interface; first preset function; the first entrance address acquisition function, second address; the first function for window screen and display function of the executive function; setting the display function pointer function refers to the second address; the first set of function pointers to the first address; execute the display function, obtain the interception of the screen. Realize no need to restart, to be shot screen window process, you can intercept the specified window screen.

【技术实现步骤摘要】
一种屏幕获取方法及系统
本专利技术涉及计算机图像处理
,尤其涉及一种屏幕获取方法及系统。
技术介绍
随着科技的发展,用户通过各种软件应用进行交互的场合越来越多。用户可以通过各种交互渠道与好友分享信息。如游戏玩家希望能够在玩游戏的过程中与好友分享精彩瞬间,此时就需要对当前游戏界面进行截图操作。现有的屏幕获取方法,例如系统自带的PrScrnSysRq(打印屏幕系统请求),是直接获取当前屏幕上全部画面,腾讯的截图工具无法截取被遮挡的窗口画面,当需要被截图的窗口部分被其它窗口遮挡时,无法只截取指定窗口中的画面。申请号为201010270354.X的专利文献公开一种计算机屏幕截取方法及其系统,通过捕捉GDI图像;获取Driect3D数据窗口的窗口句柄,根据所述窗口句柄创建跟踪窗口,并设置所述跟踪窗口跟踪所述Driect3D数据窗口在计算机显示画面中的位置和剪裁区域;捕捉所述Driect3D数据窗口的图像;根据所述跟踪窗口记录的剪裁区域对所述Driect3D数据窗口的图像进行剪裁;根据所述跟踪窗口的位置将剪裁后的所述Driect3D数据窗口的图像与所述GDI图像合成。虽然上述专利文献提供的方案可实现截取指定窗口中的画面,但是在设备启动时就要将相应的屏幕截取模块注入到进程当中,无法做到随时注入随时获取。然而,游戏玩家先重启游戏再截取屏幕就会错过精彩瞬间。
技术实现思路
本专利技术所要解决的技术问题是:提供一种屏幕获取方法及系统,实现无需重启待截图画面所在窗口的进程即可截取指定窗口的画面。为了解决上述技术问题,本专利技术采用的技术方案为:本专利技术提供一种屏幕获取方法,包括:获取截图指令;加载截图模块至进程;所述进程为待截图画面所在窗口的进程;所述截图模块创建渲染设备;获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;设置所述显示函数的函数指针指向所述第二地址;设置所述第一函数的函数指针指向所述第一地址;执行所述显示函数,获取截取画面。本专利技术还提供一种屏幕获取系统,包括:第一获取模块,用于获取截图指令;加载模块,用于加载截图模块至进程;所述进程为待截图画面所在窗口的进程;第一创建模块,用于所述截图模块创建渲染设备;第二获取模块,用于获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设模块,用于预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;第一设置模块,用于设置所述显示函数的函数指针指向所述第二地址;第二设置模块,用于设置所述第一函数的函数指针指向所述第一地址;执行模块,用于执行所述显示函数,获取截取画面。本专利技术的有益效果在于:当获取截图指令后,才加载截图模块执行截图操作,实现无需重启待截图画面所在窗口的进程即可执行相应的截图操作;通过拦截显示函数,并在执行显示函数之前先执行截图操作,实现显示函数在将下一帧画面显示在屏幕上之前可先截取已显示在屏幕上的当前画面;通过将截图模块注入到待截取画面所在窗口的进程中,实现截取的画面为待截取画面所在窗口中的内容,不受其它窗口遮挡影响。附图说明图1为本专利技术一种屏幕获取方法的流程框图;图2为本专利技术一种屏幕获取系统的结构框图;图3为本专利技术另一种屏幕获取系统的结构框图;标号说明:1、第一获取模块;2、加载模块;3、第一创建模块;4、第二获取模块;5、预设模块;6、第一设置模块;7、第二设置模块;8、执行模块;9、第三设置模块;10、第三获取模块;11、截取模块;12、第四获取模块;13、调用模块;14、监控模块;15、发送模块;16、第二创建模块;17、第三创建模块;18、第四创建模块;19、第四设置模块;20、第五设置模块;21、清理模块。具体实施方式为详细说明本专利技术的
技术实现思路
、所实现目的及效果,以下结合实施方式并配合附图予以说明。本专利技术最关键的构思在于:通过当获取截图指令后,将截图模块注入到待截取画面所在窗口的进程中,实现无需重启待截图画面所在窗口的进程即可截取指定窗口的画面。请参照图1至图3所示:如图1所示,本专利技术提供一种屏幕获取方法,包括:获取截图指令;加载截图模块至进程;所述进程为待截图画面所在窗口的进程;所述截图模块创建渲染设备;获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;设置所述显示函数的函数指针指向所述第二地址;设置所述第一函数的函数指针指向所述第一地址;执行所述显示函数,获取截取画面。DirectX通常作为开发游戏程序的工具,使用DirectX提供的函数Present可实现将后台绘制好的画面显示到当前界面上。通过HOOK技术挂钩函数Present,当系统调用函数Present显示下一帧画面时,拦截该函数并转向截图模块中自定义的第一函数。第一函数先截取当前界面显示的画面,再执行函数Present的函数体,显示下一帧画面。由于截图模块已注入待截取画面所在窗口的进程,因此函数Present显示的画面均为该进程的窗口画面,不会受其它遮挡窗口的影响。且当获取截图指令时才注入截图模块,可实现随时注入随时执行截图操作。进一步地,所述截取窗口画面具体为:设置截图起始坐标、截图长度和截图宽度;获取与所述截图起始坐标、截图长度和截图宽度相对应的区域,得到截图区域;截取所述截图区域的画面。由上述描述可知,可实现截取用户指定区域的画面。进一步地,所述执行显示函数的函数体,具体为:获取所述第一函数的函数指针指向的入口地址,得到第三地址;通过所述第三地址调用所述显示函数。由上述描述可知,可实现正确地执行显示函数的函数体。由于第一函数和显示函数的函数指针所指向的入口地址进行了调换,此时显示函数的函数指针所指向的入口地址实际为第一函数的入口地址,若直接通过函数名调用显示函数无法执行显示函数实际的函数体。由于此时第一函数的函数指针指向的入口地址为显示函数的入口地址,因此,需先获得第一函数的函数指针指向的入口地址,再通过该入口地址调用显示函数,执行显示函数的函数体。进一步地,所述获取截图指令之前,还包括:监控截图快捷键或截图控件;当触发所述截图快捷键或截图控件时,发送截图指令。由上述描述可知,可实现监控截图快捷键或截图控件,及时获知用户的截图需求。进一步地,所述截图模块创建渲染设备,具体为:创建第一窗口;在所述第一窗口上创建画图接口;使用所述画图接口中的创建渲染设备函数创建渲染设备。由上述描述可知,通过模拟DirectX创建流程创建渲染设备,实现无需重启待截图画面所在窗口的进程即可注入截图模块。优选地,使用CreateWindow函数创建一个窗口,使用Direct3DCreate9函数创建DirectX9接口,使用CreateDevice函数创建DirectX9渲染设备。进一步地,执行所述显示函数,获取截取画面之后,还包括:设置所述显示函数的函数指针指向所述第一本文档来自技高网
...
一种屏幕获取方法及系统

【技术保护点】
一种屏幕获取方法,其特征在于,包括:获取截图指令;加载截图模块至进程;所述进程为待截图画面所在窗口的进程;所述截图模块创建渲染设备;获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;设置所述显示函数的函数指针指向所述第二地址;设置所述第一函数的函数指针指向所述第一地址;执行所述显示函数,获取截取画面。

【技术特征摘要】
1.一种屏幕获取方法,其特征在于,包括:获取截图指令;加载截图模块至进程;所述进程为待截图画面所在窗口的进程;所述截图模块创建渲染设备;获取所述渲染设备中的显示函数的入口地址,得到第一地址;所述显示函数用于将后台绘制好的画面显示在当前界面上;预设第一函数;获取所述第一函数的入口地址,得到第二地址;所述第一函数用于截取窗口画面和执行显示函数的函数体;设置所述显示函数的函数指针指向所述第二地址;设置所述第一函数的函数指针指向所述第一地址;执行所述显示函数,获取截取画面。2.根据权利要求1所述的一种屏幕获取方法,其特征在于,所述截取窗口画面具体为:设置截图起始坐标、截图长度和截图宽度;获取与所述截图起始坐标、截图长度和截图宽度相对应的区域,得到截图区域;截取所述截图区域的画面。3.根据权利要求1所述的一种屏幕获取方法,其特征在于,所述执行显示函数的函数体,具体为:获取所述第一函数的函数指针指向的入口地址,得到第三地址;通过所述第三地址调用所述显示函数。4.根据权利要求1所述的一种屏幕获取方法,其特征在于,所述获取截图指令之前,还包括:监控截图快捷键或截图控件;当触发所述截图快捷键或截图控件时,发送截图指令。5.根据权利要求1所述的一种屏幕获取方法,其特征在于,所述截图模块创建渲染设备,具体为:创建第一窗口;在所述第一窗口上创建画图接口;使用所述画图接口中的创建渲染设备函数创建渲染设备。6.根据权利要求5所述的一种屏幕获取方法,其特征在于,执行所述显示函数,获取截取画面之后,还包括:设置所述显示函数的函数指针指向所述第一地址;设置所述第一函数的函数指针指向所述第二地址;释放所述渲染设备,销毁所述第一窗口。7.一种屏幕获取系统,其特征在于,包括:第一获取模块,...

【专利技术属性】
技术研发人员:刘德建巩振烨林陶钧周小白彭震丁迪锋曾捷
申请(专利权)人:福建省天奕网络科技有限公司
类型:发明
国别省市:福建,35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1