CN1179269C - 一种准确获取计算机屏幕变化的方法 - Google Patents
一种准确获取计算机屏幕变化的方法 Download PDFInfo
- Publication number
- CN1179269C CN1179269C CNB021260257A CN02126025A CN1179269C CN 1179269 C CN1179269 C CN 1179269C CN B021260257 A CNB021260257 A CN B021260257A CN 02126025 A CN02126025 A CN 02126025A CN 1179269 C CN1179269 C CN 1179269C
- Authority
- CN
- China
- Prior art keywords
- module
- message
- hook
- control desk
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- User Interface Of Digital Computer (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种准确荻取计算机屏幕变化的方法,该方法至少包含以下步骤:通过一个控制台主模块,在进程代码执行前完成一API钩子模块的挂接,该API钩子模块拦截图像输出函数,获取其输出区域,并通过消息发送给控制台主模块;同时控制台主模块载入一消息钩子模块,为操作系统挂接消息钩子,该消息钩子拦截用户输入事件以及引起屏幕变化的消息,并将该消息发送给控制台主模块,其次,控制台主模块处理接收到的消息流,合并屏幕变化的区域,抓取该区域的图像。本发明由于在进程代码执行前完成挂接,因此能对系统的全部运行过程进行监测,从而准确获取屏幕的变化。本发明能够可靠应用于远程监控,电子教室等领域。
Description
技术领域
本发明涉及计算机技术领域,特别是指一种准确获取计算机屏幕变化的方法。
背景技术
在计算机远程监控、电子教室等应用领域中,需要客户机同步显示主机的显示内容,即要求主机通过与客户机相连的通信端口,例如局域网端口、无线局域网接口、串行接口、通用串行接口(USB)等,将其显示内容传输给客户机进行同步显示。一般情况下,主机的显示内容是应用软件的操作界面或静态图片等静止图像,因此,只需将主机计算机屏幕的变化传输给客户机即可,从而避免图像数据占用过多的传输带宽和计算机资源。因此需要在主机端准确地获得计算机屏幕变化。
现有技术中获取计算机屏幕变化的方法,需要将显示存储器中的前一帧图像数据存储起来,再令当前帧图像数据与前一帧图像数据进行比较,从而获得图像变化值。这种方法的缺点在于:无论屏幕是否变化,计算机都需要周期性地(例如每秒30次)抓取当前全部屏幕图像,将之与上一周期存储的图像进行比较。因而将占用大量计算机资源。
发明内容
有鉴于此,本发明的目的在于提供一种准确获取计算机屏幕变化的方法,其可避免需要计算机周期性地抓取屏幕图像的要求,节省计算机资源。
为达到上述目的,本发明的技术方案是这样实现的:
一种准确获取计算机屏幕变化的方法,该方法至少包括以下步骤:A、控制台主模块将进程挂接模块插入到操作系统进程空间,用于拦截进程创建函数,在系统调用进程创建函数时,将API钩子模块插入到新创建的进程空间中,并且,为进程中运行的每个模块挂接API钩子;监视操作系统的模块加载函数并为获取过程地址函数GetProcAddress挂接API钩子;之后,API钩子模块拦截图像输出函数,获取其输出区域,并通过消息发送给控制台主模块;所述的控制台主模块载入一消息钩子模块,为操作系统挂接消息钩子,该消息钩子模块将所拦截的系统消息或用户输入事件交给系统中的消息处理函数,由消息处理函数判断消息钩子模块所拦截的系统消息或用户输入事件是否能够引起屏幕变化,如是则将引起屏幕变化的消息发送给控制台主模块,否则交给系统继续原操作;B、控制台主模块处理接收到的消息流,合并屏幕变化的区域,抓取该区域的图像。
其中,在步骤A中,所述为进程中运行的每个模块挂接API钩的方法是:遍历进程中运行的所有模块,为每个模块挂接API钩子。
其中,在步骤A中进一步包括:API钩子模块拦截图像输出函数,获取其输出区域后,将所拦截的区域变化信息转化为矩形坐标信息,再通过消息发送给控制台主模块;消息处理函数将消息钩子模块所拦截的引起屏幕变化的信息转化为矩形坐标后,再发送给控制台主模块。
其中,在步骤A中,所述的控制台主模块利用远程线程创建函数将进程挂接模块插入到操作系统进程空间。
其中,步骤B所述的控制台主模块是利用图形驱动接口(GDI),或直接绘图应用程序接口(DirectDraw API)抓取屏幕变化区域的图像。
本发明避免了现有技术中无论是否屏幕发生变化,都要周期性地抓取屏幕图像的要求,通过消息钩子和API钩子收集屏幕的变化,确定屏幕变化区域,抓取屏幕变化区域的图像,极大地提高了处理效率,节省了计算机资源。
由于本方法要求在进程代码执行前完成挂接,用API函数拦截图形输出函数,并且用挂接消息钩子拦截各种消息,因此,能对系统的全部运行过程进行监测,从而准确获取屏幕变化的数据。能够可靠地应用于远程监控,电子教室等领域。
附图说明
图1为依照本发明的功能模块示意图;
图2为依照本发明的控制台主模块流程图;
图3为依照本发明的消息钩子模块流程图;
图4为依照本发明的进程挂接模块流程图;
图5为依照本发明的API钩子模块流程图。
具体实施方式
为使本发明的目的、技术方案和效果更加清楚明白,以下结合附图及实施例对本发明再做进一步详细的说明。
本发明按照利用Windows的消息钩子和API钩子发现屏幕变化并获得变化区域,继而抓取变化区域图像的思路进行设计。
钩子(HOOK)机制是被Windows程序经常使用的技术之一,程序员可以利用设置Windows钩子扩展函数(SetWindowsHookEx)来拦截一些Windows消息和由此引发的事件;也可以利用替换程序中使用的应用程序编程接口(API)的方法,对相关Windows API进行拦截。
当为某个Windows进程挂接Windows消息钩子(Windows MessageHook)时,存放消息处理函数的动态链接库(DLL)会被映射进该进程中,这样就将一个DLL插入到另一个进程的地址空间中,从而进行拦截。这个方法的优点是十分简便,缺陷在于,进程仅在接受某种消息时,要插入的DLL才会被映射,在这之前,程序的运行不受控制,所以需要与API钩子的应用相结合。
本发明中,API钩子模块用于拦截图像输出函数,获取其输出区域,并通过消息发送给控制台主模块。针对API钩子模块的挂接,需要控制台主模块将一个进程挂接模块插入到操作系统进程空间,用于拦截进程创建函数,在系统调用进程创建函数时,将API钩子模块插入到新创建的进程空间中。
API钩子模块插入到新创建的进程空间后,执行以下步骤:a、遍历进程中运行的所有模块并为每个模块挂接API钩子;b、监视操作系统的模块加载函数,包括ASCII版本的LoadLibrary函数和Unicode版本的LoadLibraryEx函数,同时为获取过程地址函数(GetProcAddress)挂接API钩子;c、将所拦截API引起的变化区域信息转化为矩形坐标发送给控制台主模块。
通过消息钩子模块和在进程代码执行前挂接的API钩子模块,计算机可以准确地发现屏幕变化以及变化区域,从而实现准确抓取。
图1为本发明的功能模块示意图。其主要的流程为:为控制台主模块101挂接消息钩子模块102,同时,在控制台主模块101中插入进程挂接模块103,在进程挂接模块103插入新进程时,挂接API钩子模块104,将消息钩子和API钩子拦截到的屏幕变化发送给控制台主模块,由控制台主模块再进行处理。下面就每一模块分别说明如下:
图2为本发明的控制台主模块流程图。启动主模块后,步骤201:载入消息钩子模块,为系统挂接消息钩子;步骤202:利用远程线程创建函数将进程挂接模块插入系统进程中,在所有挂接完成后,执行步骤203进入消息循环。
步骤203:判断当前消息队列是否空闲,如果是执行步骤204,抓取更新区屏幕图像,返回步骤203,重新判断;否则执行步骤205。
步骤205:判断消息类型,如果是屏幕更新消息,执行步骤206,进行相应消息处理,执行步骤207,将消息中的更新区与当前区域合,利用有关的图形驱动接口(GDI)或直接绘图应用程序接口(DirectDraw API)抓取该区域的图像,完成一次抓取过程,返回步骤203;如果是系统退出消息,执行步骤208,卸载消息钩子模块;执行步骤209,卸载进程挂接模块,退出主模块。
图3为本发明的消息钩子模块流程图。载入本模块后,步骤301:为操作系统设置消息钩子;步骤302:拦截系统消息与用户输入事件;步骤303:进入消息处理函数;步骤304:判断是否是引起屏幕变化的消息或事件,如果是执行步骤305,消息处理函数通过重新映射实际屏幕的绝对坐标将其转化为矩形坐标,并将转化的更新区发送给控制台主模块;否则执行步骤306,交给系统继续执行原操作。至此,所有引起屏幕变化的系统消息及用户输入事件均被拦截。
图4为本发明的进程挂接模块流程图,系统进程加载该模块后,执行步骤401,用该模块替换系统进程中的CreateProcessA和CreateProcessW进程创建函数;步骤402:创建新进程,并将其挂起;步骤403:将API钩子模块插入到新创建进程的地址空间;步骤404:恢复该进程的执行。这样所有新创建的进程都会被挂接API钩子。
进程挂接API钩子模块后,就进入了API的钩子程序,图5即为本发明的API钩子模块流程图。步骤501:遍历进程中运行的所有模块,并为每个模块挂接API钩子;步骤502:为了防止进程在运行中动态加载别的模块,还必须监视操作系统的模块加载函数,由于Unicode的问题,实际上要监视ASCII版本的LoadLibrary函数和Unicode版本的LoadLibraryEx函数;步骤503:为GetProcAddress进行挂接;步骤504:拦截引起屏幕变化的API函数,并将变化转换为矩形坐标发送给控制台主模块。至此,所有引起屏幕变化的图像输出函数均被拦截。
这样,在进程代码执行前就完成了所有进程的挂接,同时对系统的全部运行过程进行监测,从而可以准确获取屏幕的变化的数据。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1、一种准确获取计算机屏幕变化的方法,其特征在于至少包含以下步骤:
A、控制台主模块将进程挂接模块插入到操作系统进程空间,用于拦截进程创建函数,在系统调用进程创建函数时,将API钩子模块插入到新创建的进程空间中,并且,为进程中运行的每个模块挂接API钩子;监视操作系统的模块加载函数并为获取过程地址函数GetProcAddress挂接API钩子;之后,API钩子模块拦截图像输出函数,获取其输出区域,并通过消息发送给控制台主模块;
所述的控制台主模块载入一消息钩子模块,为操作系统挂接消息钩子,该消息钩子模块将所拦截的系统消息或用户输入事件交给系统中的消息处理函数,由消息处理函数判断消息钩子模块所拦截的系统消息或用户输入事件是否能够引起屏幕变化,如是则将引起屏幕变化的消息发送给控制台主模块,否则交给系统继续原操作;
B、控制台主模块处理接收到的消息流,合并屏幕变化的区域,抓取该区域的图像。
2、如权利要求1所述的准确获取计算机屏幕变化的方法,其特征在于在步骤A中,所述为进程中运行的每个模块挂接API钩的方法是:遍历进程中运行的所有模块,为每个模块挂接API钩子。
3、如权利要求2所述的准确获取计算机屏幕变化的方法,其特征在于在步骤A中进一步包括:
API钩子模块拦截图像输出函数,获取其输出区域后,将所拦截的区域变化信息转化为矩形坐标信息,再通过消息发送给控制台主模块;
消息处理函数将消息钩子模块所拦截的引起屏幕变化的信息转化为矩形坐标后,再发送给控制台主模块。
4、如权利要求1所述的准确获取计算机屏幕变化的方法,其特征在于在步骤A中,所述的控制台主模块利用远程线程创建函数将进程挂接模块插入到操作系统进程空间。
5、如权利要求1所述的准确获取计算机屏幕变化的方法,其特征在于在步骤B中,控制台主模块利用图形驱动接口,或直接绘图应用程序接口抓取屏幕变化区域的图像。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021260257A CN1179269C (zh) | 2002-08-09 | 2002-08-09 | 一种准确获取计算机屏幕变化的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021260257A CN1179269C (zh) | 2002-08-09 | 2002-08-09 | 一种准确获取计算机屏幕变化的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1474267A CN1474267A (zh) | 2004-02-11 |
CN1179269C true CN1179269C (zh) | 2004-12-08 |
Family
ID=34143187
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB021260257A Expired - Fee Related CN1179269C (zh) | 2002-08-09 | 2002-08-09 | 一种准确获取计算机屏幕变化的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1179269C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI739284B (zh) * | 2020-01-20 | 2021-09-11 | 精品科技股份有限公司 | 控制台程式的控制管理方法及系統 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1764103B (zh) * | 2004-10-20 | 2010-05-12 | 联想(新加坡)私人有限公司 | 用于远程控制的隐私保护的方法和设备 |
US8606950B2 (en) | 2005-06-08 | 2013-12-10 | Logitech Europe S.A. | System and method for transparently processing multimedia data |
WO2008064613A1 (fr) * | 2006-11-30 | 2008-06-05 | Chongqing Yeahto Information Technology Co., Ltd. | Procédé et appareil pour traiter des fonds de bureau et système d'interface pour un bureau de système d'exploitation |
CN101436145B (zh) * | 2007-11-15 | 2012-02-01 | 盛乐信息技术(上海)有限公司 | 通过挂接api来重定向设备输出的方法 |
CN101984402A (zh) * | 2010-11-16 | 2011-03-09 | 广东威创视讯科技股份有限公司 | 一种图像采集和压缩方法及相关装置 |
CN103853576B (zh) | 2012-12-06 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 一种截图方法,及装置 |
CN103823683A (zh) * | 2014-02-27 | 2014-05-28 | 北京六间房科技有限公司 | 一种视频录制装置及方法 |
CN106406862B (zh) * | 2016-08-31 | 2019-10-25 | 福建省天奕网络科技有限公司 | 一种屏幕获取方法及系统 |
CN108595152A (zh) * | 2017-03-14 | 2018-09-28 | 长沙博为软件技术股份有限公司 | 一种基于图形对比的选择框识别方法 |
CN110989950A (zh) * | 2019-11-15 | 2020-04-10 | 维沃移动通信有限公司 | 一种共享控制方法及电子设备 |
-
2002
- 2002-08-09 CN CNB021260257A patent/CN1179269C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI739284B (zh) * | 2020-01-20 | 2021-09-11 | 精品科技股份有限公司 | 控制台程式的控制管理方法及系統 |
Also Published As
Publication number | Publication date |
---|---|
CN1474267A (zh) | 2004-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1179269C (zh) | 一种准确获取计算机屏幕变化的方法 | |
CN1262748A (zh) | 获取、处理和发送包含在一个图形用户界面窗口中的数据的装置和方法 | |
US5754242A (en) | Data formatting system for processing multiple independent input data streams for high resolution screen displays | |
KR100235219B1 (ko) | 디스플레이 속성 식별치의 할당과 다중하드웨어 컬러 조사표를관리하는 방법 및 장치 | |
DE112012004747B4 (de) | Verborgenes automatisiertes Spiegeln von Daten für native Schnittstellen in verteilten virtuellen Maschinen | |
US6747645B1 (en) | Graphics memory system that utilizes detached-Z buffering in conjunction with a batching architecture to reduce paging overhead | |
CN100451956C (zh) | 基于绘图引擎的屏幕显示方法 | |
CN104199723B (zh) | 基于虚拟设备的摄像头映射方法 | |
DE69930695T2 (de) | Verfahren und Vorrichtung für ein Applikationsverteiler für eine Serverapplikation | |
WO2016166183A1 (en) | Browser based display system for displaying image data | |
EP1922634A1 (en) | High level graphics stream | |
CN110493269A (zh) | 一种Web远程Docker容器桌面的方法 | |
CN1630246A (zh) | 一种远程桌面获取数据的实现方法 | |
US20010043226A1 (en) | Filter between graphics engine and driver for extracting information | |
CN106406862B (zh) | 一种屏幕获取方法及系统 | |
WO2007057053A1 (en) | Conditional updating of image data in a memory buffer | |
US6256625B1 (en) | Video acquisition system including objects with dynamic communication capabilities | |
CN101464785A (zh) | 基于wddm的屏幕获取方法及带多显示器的计算机系统 | |
US20040008212A1 (en) | Reshaping irregularly-shaped images for improved compression | |
CN110602462B (zh) | 一种基于ai的工业图像检测装置及方法 | |
CN116522299A (zh) | 基于Linux系统的应用程序窗口水印添加方法和装置 | |
CN115373878A (zh) | 基于x框架的防截屏扩展协议实现系统 | |
US20020083463A1 (en) | Method and system for presenting a video stream of a video streaming device | |
CN1920942A (zh) | 图像显示系统及方法 | |
Grone et al. | Component vs. component: why we need more than one definition [system component and software component] |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20041208 Termination date: 20200809 |