CN115599268A - 一种屏幕截图方法、计算设备和存储介质 - Google Patents

一种屏幕截图方法、计算设备和存储介质 Download PDF

Info

Publication number
CN115599268A
CN115599268A CN202211488696.8A CN202211488696A CN115599268A CN 115599268 A CN115599268 A CN 115599268A CN 202211488696 A CN202211488696 A CN 202211488696A CN 115599268 A CN115599268 A CN 115599268A
Authority
CN
China
Prior art keywords
image data
screenshot
function
protocol
hook 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.)
Pending
Application number
CN202211488696.8A
Other languages
English (en)
Inventor
张启义
罗朝江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202211488696.8A priority Critical patent/CN115599268A/zh
Publication of CN115599268A publication Critical patent/CN115599268A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Digital Computer Display Output (AREA)

Abstract

本发明实施例公开了一种屏幕截图方法、计算设备和存储介质,涉及计算机技术领域,解决已有的屏幕截图方法在Wayland协议环境下X11应用无法进行截图的技术问题,方法包括:响应于目标应用的屏幕截图操作,通过第二协议的截图函数的钩子函数获取图像数据,其中,目标应用为任一第二协议应用,钩子函数为第一协议下的屏幕截图函数;通过钩子函数存储已获取的图像数据;通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用,可见,本发明通过为X11的截图函数添加钩子函数,在钩子函数中建立X11应用与窗口服务器的Wayland服务端之间的通信,使得X11应用获取到截图数据。

Description

一种屏幕截图方法、计算设备和存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种屏幕截图方法、计算设备和存储介质。
背景技术
显示服务器协议,是一套窗口管理器与客户端间通信的协议,Linux操作系统的显示服务器协议,通常包括X11和Wayland等。
目前,多数Linux操作系统发行版的默认显示服务器协议采用Wayland协议,但是,依然有很多桌面应用是基于X11协议实现与桌面环境的交互。已有技术中,在Wayland协议下,窗口管理器通过Wayland协议来兼容显示X11应用,相当于Wayland协议为X11协议与Wayland协议的中间层,X11应用通过X11协议与Wayland协议通信,Wayland协议再通过Wayland协议来与窗口管理器通信,最终完成应用所需的请求。
在Linux操作系统的默认显示服务器协议为Wayland,且在该操作系统上运行X11应用的场景下,当X11应用需要截图时,一般通过X11的截图接口函数XGetImage()来实现,由于协议的差异性,导致Wayland无法运行XGetImage()函数,最终X11应用无法获得截图数据,导致在Wayland协议环境下X11应用无法进行截图,这严重影响到用户的操作,影响用户体验。
因此,期望提供一种屏幕截图方法,以解决已有的屏幕截图方法在Wayland协议环境下X11应用无法进行截图的技术问题。
发明内容
为此,本发明实施例提供一种屏幕截图方法、计算设备和存储介质,以力图解决或至少缓解上面存在的问题。
根据本发明实施例的一个方面,提供了一种屏幕截图方法,适于在计算设备中执行,应用于在默认显示服务器协议为第一协议的操作系统中运行第二协议应用的场景,所述方法包括:响应于目标应用的屏幕截图操作,通过第二协议的截图函数的钩子函数获取图像数据,其中,目标应用为任一第二协议应用,钩子函数为第一协议下的屏幕截图函数;通过钩子函数存储已获取的图像数据;通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至所述目标应用。
可选地,钩子函数获取图像数据包括:判断屏幕截图操作是否为第一次截图操作,若是,则创建所述钩子函数的全局对象;若不是第一次截图操作,或在创建全局对象后,通过钩子函数中全局对象的图像获取函数获取图像数据。
可选地,钩子函数中全局对象的图像获取函数获取图像数据包括:判断是否第一次调用图像获取函数,若是,创建并启动全局对象的子线程,将图像获取函数的帧缓存获取变量设置为第一预设值,若否,则将图像获取函数的帧缓存获取变量修改为第一预设值;通过子线程判断图像获取函数的帧缓存获取变量是否为第一预设值,若是,则生成帧缓存获取请求,并发送至计算设备的窗口管理器的第一协议服务端;通过全局对象将图像获取函数的帧缓存获取变量更新为第二预设值;通过子线程接收第一协议服务端通过帧缓存共享方式发送的图像数据。
可选地,本发明提供的屏幕截图方法还包括:将钩子函数的图像获取函数的线程进行挂起处理。
可选地,计算设备的窗口管理器的第一协议服务端,通过如下方式获取图像数据并发送至目标应用:响应于所述帧缓存获取请求,将所有已打开窗口的帧缓存进行合成处理,得到图像数据的帧缓存;为图像数据的帧缓存分配文件标识符;获取图像数据的存储格式、图像数据的大小和图像数据的帧缓存的文件标识符;将图像数据的存储格式、图像数据的大小和文件标识符进行合成处理,得到图像数据信息;将图像数据信息发送至目标应用。
可选地,通过钩子函数存储已获取的图像数据包括:通过子线程的目标函数对图像数据信息进行解析,得到文件标识符,目标函数为子线程向第一协议服务端的接口进行注册时添加的;通过子线程访问文件标识符,获取到图像数据;通过子线程将已获取的图像数据,按照目标格式存储至钩子函数的全局对象中;通过子线程将图像数据已获取信号的值更新为第三预设值。
可选地,本发明提供的屏幕截图方法还包括:响应于将图像数据已获取信号的值更新为第三预设值的操作,唤醒钩子函数的图像获取函数的线程;通过子线程将图像数据已获取信号的值更新为第四预设值。
可选地,通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用包括:通过钩子函数将已存储在全局对象中的图像数据按照预定格式生成截图数据,并作为返回值发送至目标应用。
可选地,本发明提供的屏幕截图方法还包括:响应于关闭目标应用的操作,释放钩子函数的全局对象;断开钩子函数与第一协议服务端的连接。
可选地,第一协议为Wayland协议,第二协议为X11协议。
可选地,第二协议应用包括通过X11协议实现与桌面环境交互的应用。
根据本发明的又一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述方法的指令。
根据本发明的另一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的方法。
根据本发明实施例的屏幕截图方法,响应于目标应用的屏幕截图操作,通过X11协议的截图函数的钩子函数获取图像数据,钩子函数为第一协议下的屏幕截图函数,通过钩子函数存储已获取的图像数据,最后通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用。可见,本发明提供的屏幕截图方法,通过为X11的截图函数添加钩子函数,在钩子函数中建立X11应用与窗口服务器的Wayland服务端之间的通信,建立通信后可从Wayland服务端获取截图数据,从而在默认显示服务器协议为Wayland协议的操作系统中运行X11应用时,X11应用可以获取到截图数据。
其次,在通过钩子函数获取图像数据的过程中,还会及时挂起钩子函数的空闲线程,以及时释放CPU资源,提高计算设备的资源利用率。
并且,在Wayland协议服务端与钩子函数的全局对象的子线程之间,通过帧缓存的文件标识符进行图像数据传输,即通过数据共享的方式进行数据传输,较少了数据拷贝,所以执行高效,不会出现延时的情况,从而高屏幕截图效率,提升了用户体验。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明实施例的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的计算设备100的框图;
图2示出了根据本发明一个实施例的屏幕截图方法200的流程图;
图3示出了根据本发明一个实施例的X11协议的截图函数的钩子函数获取图像数据的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明中,为了解决已有的屏幕截图方法在Wayland协议环境下X11应用无法进行截图的技术问题,提供了一种屏幕截图方法,该方法应用于在默认显示服务器协议为Wayland协议的操作系统中运行X11应用的场景。该方法可以打包为一个应用(即应用程序),安装于计算设备100中,或者,打包为一个插件,集成于计算设备100中的X11应用中。
屏幕截图方法的启动方式,可以根据实际应用场景进行设置,本发明对此不进行限制。例如,若该方法实现为应用,则在启动计算设备时,即计算设备开机并成功登录用户,进入用户界面时,会自动启动本发明提供的屏幕截图方法,或者,若该方法实现为插件并集成于X11应用中,则在启动任一X11应用时,会自动启动本发明提供的屏幕截图方法。
上述的计算设备100可以实现为服务器,例如应用服务器、Web服务器等;也可以实现为桌面电脑、笔记本电脑、处理器芯片、平板电脑等,但不限于此。图1示出了的计算设备100的物理组件(即,硬件)的框图。在基本配置中,计算设备100包括至少一个处理单元102和系统存储器104。根据一个方面,取决于计算设备的配置和类型,系统存储器104包括但不限于易失性存储(例如,随机存取存储器)、非易失性存储(例如,只读存储器)、闪速存储器、或者这样的存储器的任何组合。
根据一个方面,系统存储器104包括操作系统105。系统存储器104还包括应用程序150。根据一个方面,操作系统105,例如,适合于控制计算设备100的操作。此外,示例结合图形库、其他操作系统、或任何其他应用程序而被实践,并且不限于任何特定的应用或系统。在图1中通过在虚线108内的那些组件示出了该基本配置。根据一个方面,计算设备100具有额外的特征或功能。例如,根据一个方面,计算设备100包括额外的数据存储设备(可移动的和/或不可移动的),例如磁盘、光盘、或者磁带。这样额外的存储在图1中是由可移动存储设备109和不可移动存储设备110示出的。
如在上文中所陈述的,根据一个方面,在系统存储器104中存储了多个程序模块。当本发明提供的屏幕截图方法实现为应用程序150,并且在处理单元102上执行时,应用程序150执行过程,其包括但不限于方法200的阶段中的一个或多个阶段。根据一个方面,不限制应用程序的类型,例如应用程序还包括:电子邮件和联系人应用程序、文字处理应用程序、电子表格应用程序、数据库应用程序、幻灯片展示应用程序、绘画或计算机辅助应用程序、网络浏览器应用程序等。
根据一个方面,可以在包括分立电子元件的电路、包含逻辑门的封装或集成的电子芯片、利用微处理器的电路、或者在包含电子元件或微处理器的单个芯片上实践示例。例如,可以经由其中在图1中所示出的每个或许多组件可以集成在单个集成电路上的片上系统(SOC)来实践示例。根据一个方面,这样的SOC设备可以包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元、以及各种应用功能,其全部作为单个集成电路而被集成(或“烧”)到芯片基底上。当经由SOC进行操作时,可以经由在单个集成电路(芯片)上与计算设备100的其他组件集成的专用逻辑来对在本文中所描述的功能进行操作。还可以使用能够执行逻辑操作(例如AND、OR和NOT)的其他技术来实践本发明的实施例,所述其他技术包括但不限于机械、光学、流体、和量子技术。另外,可以在通用计算机内或在任何其他任何电路或系统中实践本发明的实施例。
根据一个方面,计算设备100还可以具有一个或多个输入设备112,例如键盘、鼠标、笔、语音输入设备、触摸输入设备等。还可以包括输出设备114,例如显示器、扬声器、打印机等。前述设备是示例并且也可以使用其他设备。计算设备100可以包括允许与其他计算设备118进行通信的一个或多个通信连接116,合适的通信连接116的示例包括但不限于:RF发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。计算设备100可以与一个或多个其他计算设备118通信连接。
如在本文中所使用的术语计算机可读介质包括计算机存储介质。计算机存储介质可以包括以任何用于存储信息(例如,计算机可读指示、数据结构、或程序模块)的方法或技术来实现的易失性的和非易失性的、可移动的和不可移动的介质。系统存储器104、可移动存储设备109和不可移动存储设备110都是计算机存储介质的示例(即,存储器存储)。计算机存储介质可以包括随机存取存储器(RAM) 、只读存储器(ROM) 、电可擦只读存储器(EEPROM)、闪速存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光存储、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或者可用于存储信息并且可以由计算设备100访问的任何其他制品。根据一个方面,任何这样的计算机存储介质都可以是计算设备100的一部分。计算机存储介质不包括载波或其他经传播的数据信号。
根据一个方面,通信介质是由计算机可读指令、数据结构、程序模块、或者经调制的数据信号(例如,载波或其他传输机制)中的其他数据实施的,并且包括任何信息传递介质。根据一个方面,术语“经调制的数据信号”描述了具有一个或多个特征集或者以将信息编码在信号中的方式改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频(RF)、红外线的、以及其他无线介质之类的无线介质。
图2示出了根据本发明一个实施例的屏幕截图方法200的流程图。方法200适于在计算设备100中执行,方法200可以包括步骤210至步骤250。
通过本发明提供的屏幕截图方法,通过为X11的截图函数添加钩子函数,在钩子函数中建立X11应用与窗口服务器的Wayland服务端之间的通信,建立通信后可从Wayland服务端获取截图数据,从而在默认显示服务器协议为Wayland协议的操作系统中运行X11应用时,X11应用可以获取到截图数据。
首先值得注意的是,在启动目标应用时,即启动任一X11应用时,会判断当前操作系统的默认显示服务器协议是否为Wayland协议,若是,说明此时为在默认显示服务器协议为Wayland协议的操作系统中运行X11应用的场景,那么加载X11协议下的截图函数的钩子函数,钩子函数为第一协议下的屏幕截图函数,第一协议为Wayland协议,也就是说,钩子函数为Wayland协议下的屏幕截图函数。若当前操作系统的默认显示服务器协议不是Wayland协议,那么即可结束程序的执行,继续启动X11应用即可。
在一些实施方式中,加载X11协议下的截图函数的钩子函数的方式可以根据实际应用场景进行设置,本发明对此不进行限制。例如,通过环境变量加载钩子函数的动态库。进一步地,环境变量可以根据实际应用场景进行设置,本发明对此不进行限制,例如,可以为LD_PRELOAD环境变量。
在已加载X11协议下的截图函数的钩子函数的前提下,执行步骤210,监测屏幕截图操作事件。当用户在任一窗口触发截图操作时,生成一个屏幕截图操作事件,当监测到屏幕截图操作事件时,执行步骤220,通过第二协议的截图函数的钩子函数获取图像数据,其中,第二协议为X11协议,即,通过X11协议的截图函数的钩子函数获取图像数据。由于钩子函数是Wayland协议下的屏幕截图函数,而当前操作系统的默认显示服务器协议也是Wayland协议,那么即可实现钩子函数与计算设备中窗口管理器的Wayland服务端通信,也就可以获取X11应用的屏幕截图。
图3示出了根据本发明一个实施例的X11协议的截图函数的钩子函数获取图像数据的流程图,可以包括步骤301至步骤309。
首先执行步骤301,判断屏幕截图操作是否为第一次截图操作,若是,则执行步骤302,创建钩子函数的全局对象。例如创建钩子函数的全局对象S。
若不是第一次截图操作,或在创建钩子函数的全局对象后,继续执行步骤303,判断是否为第一次调用全局对象的图像获取函数,若是第一次调用,则执行步骤304,创建并启动全局对象的子线程,并将图像获取函数的帧缓存获取变量设置为第一预设值。若不是第一次调用,则执行步骤305,将图像获取函数的帧缓存获取变量修改为第一预设值。
之后,执行步骤306,通过子线程判断图像获取函数的帧缓存获取变量是否为第一预设值,若是,则执行步骤307,生成帧缓存获取请求,并发送至计算设备的窗口管理器的第一协议服务端。若图像获取函数的帧缓存获取变量不为第一预设值,则继续执行306。此处值得注意的是,钩子函数中全局对象的子线程,与计算设备的窗口管理器的Wayland服务端,是通过remote access接口进行通信的。
在一些实施方式中,子线程与Wayland协议服务端进行通信的过程为:在子线程与Wayland协议服务端初次建立连接后,Wayland协议服务端向子线程广播的remote access接口,子线程监听到remote access接口后,获得remote access接口,并注册该接口,添加解析函数,例如解析函数_func_。之后,即可通过调用remote access接口实现子线程与Wayland协议服务端的信息传输,也可直接使用解析函数。
若图像获取函数的帧缓存获取变量为第一预设值,且在生成帧缓存获取请求并发送至计算设备的窗口管理器的Wayland协议服务端后,执行步骤308,通过全局对象将图像获取函数的帧缓存获取变量更新为第二预设值。第一预设值、第二预设值可以根据实际应用场景进行设置,本发明对此不做限制。例如,第一预设值、第二预设值分别为true、false。
由于此时图像获取函数不需要工作,因此本发明方法可以将全局对象的图像获取函数的线程进行挂起处理,实质上是将全局对象的主线程进行挂起处理,也即将钩子函数的空闲线程进行挂起处理,但是全局对象的子线程仍正常工作。这样,即可及时释放不工作的线程的CPU资源,提高计算设备的资源利用率。
在一些实施方式中,计算设备的窗口管理器的Wayland协议服务端,通过如下方式获取图像数据并发送至目标应用:
首先响应于帧缓存获取请求,将所有已打开窗口的帧缓存进行合成处理,得到图像数据的帧缓存。为图像数据的帧缓存分配文件标识符fd,文件标识符是帧缓存的唯一标识,通过文件标识符即可访问到对应的帧缓存。文件标识符可以根据实际应用场景进行设置,本发明对此不做限制。
在为图像数据的帧缓存分配文件标识符后,获取图像数据的存储格式、图像数据的大小和图像数据的帧缓存的文件标识符,并将图像数据的存储格式、图像数据的大小和文件标识符进行合成处理,得到图像数据信息,也就是说,图像数据信息中包括图像数据的存储格式、图像数据的大小和帧缓存的文件标识符。在得到图像数据信息后,将图像数据信息发送至子线程。
这样,在Wayland协议服务端与钩子函数的全局对象的子线程之间,通过帧缓存的文件标识符进行图像数据传输,即通过数据共享的方式进行数据传输,较少了数据拷贝,所以执行高效,不会出现延时的情况,从而高屏幕截图效率,提升了用户体验。
最后执行步骤309,通过子线程接收Wayland协议服务端发送的图像数据信息。
从而基于步骤301至步骤309,实现通过X11协议的截图函数的钩子函数获取图像数据。
在通过X11协议的截图函数的钩子函数,获取到图像数据后,继续执行步骤230,通过钩子函数存储已获取的图像数据。在一些所述方式中,钩子函数存储已获取的图像数据的过程如下:
首先通过子线程的目标函数,即子线程已经添加的解析函数_func_,对图像数据信息进行解析,得到文件标识符。之后通过子线程访问文件标识符获取到图像数据,即获取到窗口管理器进行合成处理后的帧缓存。在得到图像数据后,通过子线程将图像数据已获取信号的值更新为第三预设值,并响应于将图像数据已获取信号的值更新为第三预设值的操作,通过操作系统来唤醒图像获取函数的线程,即图像获取函数可以正常运行,并通过子线程将图像数据已获取信号的值更新为第四数值。通过子线程将已获取的图像数据按照预设尺寸存储至钩子函数的全局对象的内存中,从而实现通过钩子函数存储已获取的图像数据。
其中,预设尺寸与用户进行屏幕截图操作时确定的截图大小相同,以满足用户在屏幕上进行任意区域的截图。上述的第三预设值、第四预设值可以根据实际应用场景进行设置,本发明对此不做限制。例如,第三预设值、第四预设值同样可以分别为true、false。
在通过钩子函数存储已获取的图像数据后,执行步骤240,通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用。具体地,钩子函数基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用包括:通过钩子函数将已存储的图像数据按照预定格式生成截图数据,并作为返回值发送至目标应用。此处的预定格式,可以理解为图像数据内容的格式,例如rgb、rgba和xrgb等。该预定格式可为用户在目标应用预先设置的,也可为目标应用默认的。
当用户关闭目标应用时,响应于该操作,执行步骤250,释放钩子函数的全局对象,并断开钩子函数与第一协议服务端的连接,即断开钩子函数中子线程与第一协议服务端的连接。
至此,便实现了在Wayland协议环境下X11应用的屏幕截图。每当在Wayland协议环境下X11应用需要进行屏幕截图时,均需执行步骤210至步骤250。
由上述内容可知,本发明提供的屏幕截图方法,响应于目标应用的屏幕截图操作,通过X11协议的截图函数的钩子函数获取图像数据,钩子函数为第一协议下的屏幕截图函数,通过钩子函数存储已获取的图像数据,最后通过钩子函数,基于已存储的图像数据生成截图数据,并将截图数据返回至目标应用。可见,本发明提供的屏幕截图方法,通过为X11的截图函数添加钩子函数,在钩子函数中建立X11应用与窗口服务器的Wayland服务端之间的通信,建立通信后可从Wayland服务端获取截图数据,从而在默认显示服务器协议为Wayland协议的操作系统中运行X11应用时,X11应用可以获取到截图数据。
其次,在通过钩子函数获取图像数据的过程中,还会及时挂起钩子函数的空闲线程,以及时释放CPU资源,提高计算设备的资源利用率。
并且,在Wayland协议服务端与钩子函数的全局对象的子线程之间,通过帧缓存的文件标识符进行图像数据传输,即通过数据共享的方式进行数据传输,较少了数据拷贝,所以执行高效,不会出现延时的情况,从而高屏幕截图效率,提升了用户体验。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的屏幕截图方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (13)

1.一种屏幕截图方法,适于在计算设备中执行,应用于在默认显示服务器协议为第一协议的操作系统中运行第二协议应用的场景,所述方法包括:
响应于目标应用的屏幕截图操作,通过第二协议的截图函数的钩子函数获取图像数据,其中,所述目标应用为任一所述第二协议应用,所述钩子函数为所述第一协议下的屏幕截图函数;
通过所述钩子函数存储已获取的图像数据;
通过所述钩子函数,基于已存储的图像数据生成截图数据,并将所述截图数据返回至所述目标应用。
2.如权利要求1所述的方法,其中,所述钩子函数获取图像数据包括:
判断屏幕截图操作是否为第一次截图操作,若是,则创建所述钩子函数的全局对象;
若不是第一次截图操作,或在创建所述全局对象后,通过所述钩子函数中全局对象的图像获取函数获取图像数据。
3.如权利要求2所述的方法,其中,所述钩子函数中全局对象的图像获取函数获取图像数据包括:
判断是否第一次调用所述图像获取函数,若是,创建并启动所述全局对象的子线程,将所述图像获取函数的帧缓存获取变量设置为第一预设值,若否,则将所述图像获取函数的帧缓存获取变量修改为所述第一预设值;
通过所述子线程判断所述图像获取函数的帧缓存获取变量是否为所述第一预设值,若是,则生成帧缓存获取请求,并发送至所述计算设备的窗口管理器的第一协议服务端;
通过所述全局对象将所述图像获取函数的帧缓存获取变量更新为第二预设值;
通过所述子线程接收所述第一协议服务端通过帧缓存共享方式发送的图像数据。
4.如权利要求3所述的方法,还包括:
将所述钩子函数的图像获取函数的线程进行挂起处理。
5.如权利要求4所述的方法,其中,所述计算设备的窗口管理器的第一协议服务端,通过如下方式获取所述图像数据并发送至所述目标应用:
响应于所述帧缓存获取请求,将所有已打开窗口的帧缓存进行合成处理,得到图像数据的帧缓存;
为所述图像数据的帧缓存分配文件标识符;
获取图像数据的存储格式、图像数据的大小和所述图像数据的帧缓存的文件标识符;
将所述图像数据的存储格式、所述图像数据的大小和所述文件标识符进行合成处理,得到图像数据信息;
将所述图像数据信息发送至所述目标应用。
6.如权利要求5所述的方法,其中,所述通过所述钩子函数存储已获取的图像数据包括:
通过所述子线程的目标函数对所述图像数据信息进行解析,得到所述文件标识符,所述目标函数为所述子线程向所述第一协议服务端的接口进行注册时添加的;
通过所述子线程访问所述文件标识符,获取到所述图像数据;
通过所述子线程将已获取的图像数据,按照目标格式存储至所述钩子函数的全局对象中;
通过所述子线程将图像数据已获取信号的值更新为第三预设值。
7.如权利要求6所述的方法,还包括:
响应于将图像数据已获取信号的值更新为第三预设值的操作,唤醒所述钩子函数的图像获取函数的线程;
通过所述子线程将所述图像数据已获取信号的值更新为第四预设值。
8.如权利要求6所述的方法,其中,所述通过所述钩子函数,基于已存储的图像数据生成截图数据,并将所述截图数据返回至所述目标应用包括:
通过所述钩子函数将已存储在全局对象中的图像数据按照预定格式生成截图数据,并作为返回值发送至所述目标应用。
9.如权利要求3至5中任一项所述的方法,还包括:
响应于关闭所述目标应用的操作,释放所述钩子函数的全局对象;
断开所述钩子函数与所述第一协议服务端的连接。
10.如权利要求1至5中任一项所述的方法,其中,所述第一协议为Wayland协议,所述第二协议为X11协议。
11.如权利要求1至5中任一项所述的方法,其中,所述第二协议应用包括通过X11协议实现与桌面环境交互的应用。
12.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1至11中任一项所述的方法的指令。
13.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1至11中任一项所述的方法。
CN202211488696.8A 2022-11-25 2022-11-25 一种屏幕截图方法、计算设备和存储介质 Pending CN115599268A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211488696.8A CN115599268A (zh) 2022-11-25 2022-11-25 一种屏幕截图方法、计算设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211488696.8A CN115599268A (zh) 2022-11-25 2022-11-25 一种屏幕截图方法、计算设备和存储介质

Publications (1)

Publication Number Publication Date
CN115599268A true CN115599268A (zh) 2023-01-13

Family

ID=84851925

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211488696.8A Pending CN115599268A (zh) 2022-11-25 2022-11-25 一种屏幕截图方法、计算设备和存储介质

Country Status (1)

Country Link
CN (1) CN115599268A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117032874A (zh) * 2023-10-08 2023-11-10 统信软件技术有限公司 一种远程控制方法、装置、计算设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150161754A1 (en) * 2013-12-10 2015-06-11 Joel Solomon Isaacson System and method for remote graphics using non-pixel rendering interfaces
CN115309315A (zh) * 2022-10-11 2022-11-08 麒麟软件有限公司 Wayland环境下X应用的截图方法、系统及介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150161754A1 (en) * 2013-12-10 2015-06-11 Joel Solomon Isaacson System and method for remote graphics using non-pixel rendering interfaces
CN115309315A (zh) * 2022-10-11 2022-11-08 麒麟软件有限公司 Wayland环境下X应用的截图方法、系统及介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
小尼玛扎西等: "藏文鼠标屏幕取词的原理与实现", 《西藏科技》 *
李丽, 电子科技大学出版社 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117032874A (zh) * 2023-10-08 2023-11-10 统信软件技术有限公司 一种远程控制方法、装置、计算设备及存储介质
CN117032874B (zh) * 2023-10-08 2024-02-23 统信软件技术有限公司 一种远程控制方法、装置、计算设备及存储介质

Similar Documents

Publication Publication Date Title
CN109213611B (zh) 跨进程通讯方法、装置、终端及存储介质
CN108462760B (zh) 电子装置、集群访问域名自动生成方法及存储介质
CN108572845B (zh) 分布式微服务集群的升级方法及相关系统
CN110413386A (zh) 多进程处理方法、装置、终端设备及计算机可读存储介质
CN108287708B (zh) 一种数据处理方法、装置、服务器及计算机可读存储介质
CN111679911B (zh) 云环境中gpu卡的管理方法、装置、设备及介质
CN110825499B (zh) 基于统一容器云平台的安全隔离的实现方法及装置
CN113835887B (zh) 显存的分配方法、装置、电子设备及可读存储介质
CN109359092B (zh) 文件管理方法、桌面显示方法、装置、终端及介质
CN115599268A (zh) 一种屏幕截图方法、计算设备和存储介质
CN115904761A (zh) 片上系统、车辆及视频处理单元虚拟化方法
CN114880072A (zh) 一种虚拟机的应用窗口显示方法、计算设备及存储介质
CN116662039B (zh) 基于共享内存的工业信息并行检测方法、装置及介质
CN112925796A (zh) 一种写一致性控制方法、装置、设备及存储介质
US8707449B2 (en) Acquiring access to a token controlled system resource
CN116151631A (zh) 一种业务决策处理系统、一种业务决策处理方法和装置
CN114070889B (zh) 配置方法、流量转发方法、设备、存储介质及程序产品
CN115269063A (zh) 进程创建方法、系统、设备及介质
CN114490266A (zh) 一种数据采集方法、装置、设备及存储介质
CN114510334A (zh) 类实例的调用方法、装置、电子设备及自动驾驶车辆
CN114253671A (zh) Android容器的GPU池化方法
CN114579085A (zh) 网关的api开发方法及装置
CN115586853B (zh) 一种窗口显示方法、计算设备和存储介质
CN114185682B (zh) 日志输出方法、装置、电子设备及存储介质
EP4428675A1 (en) Cloud technology-based graphic program online development method and system, and related device

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination