CN116522299A - 基于Linux系统的应用程序窗口水印添加方法和装置 - Google Patents

基于Linux系统的应用程序窗口水印添加方法和装置 Download PDF

Info

Publication number
CN116522299A
CN116522299A CN202310753695.XA CN202310753695A CN116522299A CN 116522299 A CN116522299 A CN 116522299A CN 202310753695 A CN202310753695 A CN 202310753695A CN 116522299 A CN116522299 A CN 116522299A
Authority
CN
China
Prior art keywords
window
target process
watermark
function
linux
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
CN202310753695.XA
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.)
Flash It Co ltd
Original Assignee
Flash It 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 Flash It Co ltd filed Critical Flash It Co ltd
Priority to CN202310753695.XA priority Critical patent/CN116522299A/zh
Publication of CN116522299A publication Critical patent/CN116522299A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本发明提供一种基于Linux系统的应用程序窗口水印添加方法和装置,通过在目标进程对应的窗口之上创建位置和大小均与该窗口一致的水印窗口并一直保持该水印窗口在目标进程对应的窗口之上,可以将窗口水印添加操作与目标进程实现最大程度的脱钩、降低耦合度,不干扰原有程序的运行逻辑、不引入不确定因素,因此能够保证程序的完整运行性,从而兼顾应用程序信息的保护和应用程序运行安全性的保障。此外,窗口水印添加方式均建立在Linux的X11之上,基于X11函数获取窗口信息并对窗口进行控制,因此从代码实现上无需考虑目标进程的实现框架,具有通用性,扩大了该方法的适用范围和灵活性。

Description

基于Linux系统的应用程序窗口水印添加方法和装置
技术领域
本发明涉及信息安全技术领域,尤其涉及一种基于Linux系统的应用程序窗口水印添加方法和装置。
背景技术
随着社会信息化程度的提高,信息安全的重要性愈发重要,其中窗口水印是一种有效的保护手段,通过在要保护的进程的窗口上显示一层包含文字、图片以及二维码中任意一种水印的图层对该窗口内显示的信息进行保护。
目前对用用程序窗口添加水印的方式通常是注入可执行文件到目标程序中,在系统启动目标应用程序后再基于窗口函数的Hook机制调用相应的窗口绘制函数,改变原有函数执行逻辑,增加自定义的水印绘制信息,进而到达窗口水印的效果。然而,由于在Linux下窗口界面开发的框架有很多种,诸如X11、Gtk、Electron、Qt、WxWidgets等等,不同框架实现的窗口函数有着不同的逻辑,针对窗口设置hook机制需要针对不同软件进行适配,该适配工作的工作量将是灾难性的。此外,函数注入的方式还需在目标进程窗口的函数执行过程中插入自定义的窗口水印绘制函数,但是每个UI框架的实现函数都不尽相同,因此诸如方式无法普遍的适用于所有应用程序。因此上述注入式方式添加窗口水印的灵活性和可适用范围均较差。
更重要的是,上述注入方式还存在着安全风险,原因在于该方案会把自定义的窗口水印绘制函数代码注入到目标进程中去运行,进程执行过程的安全性具备不确定性,一旦注入逻辑稍有差池则会导致目标进程出现显示异常、执行异常等异常状况,甚至导致目标进程崩溃。因此,上述注入方式会干扰目标进程的运行,可能降低目标进程执行的安全性。
发明内容
本发明提供一种基于Linux系统的应用程序窗口水印添加方法和装置,用以解决现有技术中窗口水印添加方式灵活性和可适用范围较差且存在安全风险的缺陷。
本发明提供一种基于Linux系统的应用程序窗口水印添加方法,包括:
基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:
基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;
当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:
基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;
基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:
在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;
若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对所述水印窗口增加置顶属性,使得所述水印窗口在当前桌面上置顶。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口,之后还包括:
若所述目标进程对应的窗口不为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool)函数取消所述水印窗口的置顶属性。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,具体包括:
基于Linux X11的XQueryTree函数获取当前桌面的所有窗口的Window值,作为相应窗口的id;
基于Linux X11的XGetWindowProperty函数获取各个窗口的 _NET_WM_识别号值,作为相应窗口的进程识别号。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,还包括:
基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口。
根据本发明提供的一种基于Linux系统的应用程序窗口水印添加方法,所述基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口,具体包括:
基于Linux X11的XgetWindowProperty函数获取所述目标进程对应的窗口的_NET_WM_STATE属性;
确定所述目标进程对应的窗口的_NET_WM_STATE属性中是否包含_NET_WM_STATE_HIDDEN值;
若所述目标进程对应的窗口的_NET_WM_STATE属性中包含_NET_WM_STATE_HIDDEN值,则基于Qt的QWidget.hide函数隐藏所述水印窗口。
本发明还提供一种基于Linux系统的应用程序窗口水印添加装置,包括:
启动判定单元,用于基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
水印创建单元,用于若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
水印调整单元,用于利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
水印置顶单元,用于获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于Linux系统的应用程序窗口水印添加方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于Linux系统的应用程序窗口水印添加方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述基于Linux系统的应用程序窗口水印添加方法。
本发明提供的基于Linux系统的应用程序窗口水印添加方法和装置,通过在目标进程对应的窗口之上创建位置和大小均与该窗口一致的水印窗口并一直保持该水印窗口在目标进程对应的窗口之上,可以将窗口水印添加操作与目标进程实现最大程度的脱钩、降低耦合度,不干扰原有程序的运行逻辑、不引入不确定因素,因此能够保证程序的完整运行性,从而兼顾应用程序信息的保护和应用程序运行安全性的保障。此外,本发明实施例采用的窗口水印添加方式均建立在Linux的X11之上,利用了不同实现框架下构建的进程窗口在Linux底层都基于X11实现,故而基于X11函数获取窗口信息并对窗口进行控制,因此从代码实现上无需考虑目标进程的实现框架,具有通用性,扩大了该方法的适用范围和灵活性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于Linux系统的应用程序窗口水印添加方法的流程示意图;
图2是本发明提供的水印窗口调整方法的流程示意图;
图3是本发明提供的水印窗口隐藏方法的流程示意图;
图4是本发明提供的基于Linux系统的应用程序窗口水印添加装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明提供的基于Linux系统的应用程序窗口水印添加方法的流程示意图,如图1所示,该方法包括:
步骤110,基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
步骤120,若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
步骤130,利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
步骤140,获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
具体地,基于Linux X11函数实时获取当前桌面上的所有窗口(包括活跃窗口和非活跃窗口)的相关信息,包括窗口的id以及该窗口对应的应用程序进程的进程识别号(Process Identification,PID)。由于在Linux系统中,无论应用程序进程的实现框架是哪一种,其在Linux系统中的底层实现都会基入X11(即X Window System,图形化窗口管理系统),因此通过Linux系统中的X11函数可以实时获取桌面上打开的所有窗口的相关信息,还可以基于Linux系统中的X11函数对桌面上的窗口进行操控。基于获取的所有窗口的进程识别号以及待添加水印的目标进程的进程识别号,可以判断目标进程当前是否已启动,若目标进程已启动,则可以对其对应的窗口添加窗口水印,否则无需对当前桌面上的窗口进行水印添加处理。其中,目标进程对应待进行保护的应用程序。
若目标进程已启动,则可以基于目标进程的进程识别号以及上述获取的所有窗口的进程识别号,确定该目标进程对应的窗口,并获取该窗口的id。基于目标进程对应的窗口的id,可以定位到该窗口在当前桌面上的位置。为了对该目标进程添加窗口水印,可以基于Qt在该目标进程对应的窗口上层创建该目标进程对应的水印窗口。其中,水印窗口中包含有自定义的水印信息,包括文字、图像以及二维码中的一种或多种。此处,Qt是一种跨平台的C++图形用户界面应用程序开发框架,利用Qt可以实现窗口绘制。通过重写Qt的QWidget类中的void paintEvent(QPaintEvent *event)函数来绘制水印窗口内容,其中可以分别使用QPainter drawText函数和drawPixmap函数实现文字绘制功能和图片绘制功能。
创建了目标进程对应的水印窗口后,可以设置水印窗口的透明属性和鼠标穿透属性,以避免影响用户与目标进程对应的窗口的人机交互体验。其中,通过设置水印窗口的透明属性将水印窗口设置为透明状态,以避免影响目标进程对应的窗口的显示效果。通过设置水印窗口的鼠标穿透属性,让鼠标事件能够透传到水印窗口的下层,以使得将水印窗口置于目标进程对应的窗口之上时,用户仍然可以正常操作目标进程对应的窗口。此处,可以通过设置Qt的QWidget类中的Qt::WA_TransparentForMouseEvents属性以及Qt::WA_TranslucentBackground属性,达到窗口穿透的效果。
考虑到用户可能会对目标进程对应的窗口进行移动、放缩等操作使得该窗口的位置和大小发生变化,因此,为了保证目标进程对应的水印窗口一直保持在目标进程对应的窗口之上以保护目标进程对应的窗口内的显示信息,可以利用Linux X11函数实时获取目标进程对应的窗口当前的实时窗口坐标和/或实时大小信息。其中,若目标进程对应的窗口发生了位置变化,则可以获取该窗口当前的实时窗口坐标;若目标进程对应的窗口发生了大小变化,则可以获取该窗口当前的实时大小信息;若目标进程对应的窗口同时发生了位置变化和大小变化,则可以获取该窗口当前的实时窗口坐标和实时大小信息。
基于目标进程对应的窗口的实时窗口坐标和/或实时大小信息,对应设置目标进程对应的水印窗口的位置和/或大小,使得该水印窗口准确完整地附着在目标进程对应的窗口之上。其中,若目标进程对应的窗口发生了位置变化,则对应调整目标进程对应的水印窗口的位置,使其位置与目标进程对应的窗口的实时窗口坐标一致;若目标进程对应的窗口发生了大小变化,则对应调整目标进程对应的水印窗口的大小,使其大小与目标进程对应的窗口的实时大小信息一致;若目标进程对应的窗口同时发生了位置变化和大小变化,则同时调整目标进程对应的水印窗口的位置和大小,使其位置和大小均与目标进程对应的窗口一致。
与此同时,用户的上述窗口调整行为可能会激活目标进程对应的窗口,使得该窗口成为活跃窗口并且其层级会处于所有窗口的层级之上。为了保证目标进程对应的水印窗口一直保持在目标进程对应的窗口之上显示,可以在目标进程对应的窗口成为活跃窗口后,将其对应的水印窗口置顶。其中,可以获取当前桌面的活跃窗口信息,并基于活跃窗口信息确定目标进程对应的窗口是否为当前桌面的活跃窗口。
可见,本发明实施例通过在目标进程对应的窗口之上创建位置和大小均与该窗口一致的水印窗口并一直保持该水印窗口在目标进程对应的窗口之上,可以将窗口水印添加操作与目标进程实现最大程度的脱钩、降低耦合度,不干扰原有程序的运行逻辑、不引入不确定因素,因此能够保证程序的完整运行性,从而兼顾应用程序信息的保护和应用程序运行安全性的保障。此外,本发明实施例采用的窗口水印添加方式均建立在Linux的X11之上,利用了不同实现框架下构建的进程窗口在Linux底层都基于X11实现,故而基于X11函数获取窗口信息并对窗口进行控制,因此从代码实现上无需考虑目标进程的实现框架,具有通用性,扩大了该方法的适用范围和灵活性。
基于上述实施例,如图2所示,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:
步骤210,基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;
步骤220,当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。
具体地,利用X11中的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型的消息和PropertyChangeMask类型的消息,使得在系统中发出上述两类消息的时候可以及时接收到该消息并获取该消息内携带的信息。随后,捕获当前桌面上发生的窗口移动事件和窗口大小调整事件。其中,窗口移动事件对应着用户针对当前桌面上任一窗口的移动行为,窗口大小调整事件对应着用户针对当前桌面上任一窗口的放缩行为。
当捕获到窗口移动事件和/或窗口大小调整事件时,基于目标进程对应的窗口的id确定相应事件是否关联目标进程对应的窗口,以判断发生窗口移动事件和/或窗口大小调整事件的窗口是否是目标进程对应的窗口。若相应事件关联目标进程对应的窗口,则从相应事件的消息结构体中获取目标进程对应的窗口的实时窗口坐标和/或实时大小信息。其中,若捕获了窗口移动事件,则从该事件对应的消息的消息结构体中获取目标进程对应的窗口的实时窗口坐标;若捕获了窗口大小调整事件,则从该事件对应的消息的消息结构体中获取目标进程对应的窗口的实时大小信息。
基于上述任一实施例,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:
基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;
基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。
具体地,基于XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息之后,可以通过XnextEvent函数阻塞获取Xevent事件,从而捕获系统中的窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时能够及时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息,以从相应消息结构体中获取相应信息。
基于上述任一实施例,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:
在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;
若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对所述水印窗口增加置顶属性,使得所述水印窗口在当前桌面上置顶。
具体地,在目标进程对应的水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息。其中,可以通过X11的 XgetWindowProperty函数获取屏幕XDefaultRootWindow(display) 根窗口的_NET_ACTIVE_WINDOW属性,该属性对应的即为当前桌面的活跃窗口。基于上述活跃窗口信息确定目标进程对应的窗口是否为当前桌面的活跃窗口。若目标进程对应的窗口为当前桌面的活跃窗口,则基于水印窗口的Qt函数——setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对水印窗口增加置顶属性,使得该水印窗口在当前桌面上置顶。若目标进程对应的窗口不是当前桌面的活跃窗口,则基于水印窗口的Qt函数——setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool)函数取消该水印窗口的置顶属性。
基于上述任一实施例,所述基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,具体包括:
基于Linux X11的XQueryTree函数获取当前桌面的所有窗口的Window值,作为相应窗口的id;
基于Linux X11的XGetWindowProperty函数获取各个窗口的 _NET_WM_识别号值,作为相应窗口的进程识别号。
基于上述任一实施例,该方法还包括:
基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口。
具体地,基于Linux X11函数实时监控目标进程对应的窗口在当前桌面上的状态,当目标进程对应的窗口被最小化至任务栏之后,也将该目标进程对应的水印窗口进行隐藏,以避免该水印窗口影响其他进程对应的窗口的显示效果。
基于上述任一实施例,如图3所示,所述基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口,具体包括:
步骤310,基于Linux X11的XgetWindowProperty函数获取所述目标进程对应的窗口的_NET_WM_STATE属性;
步骤320,确定所述目标进程对应的窗口的_NET_WM_STATE属性中是否包含_NET_WM_STATE_HIDDEN值;
步骤330,若所述目标进程对应的窗口的_NET_WM_STATE属性中包含_NET_WM_STATE_HIDDEN值,则基于Qt的QWidget.hide函数隐藏所述水印窗口。
具体地,通过Linux X11的XgetWindowProperty函数获取目标进程对应的窗口的_NET_WM_STATE属性,该_NET_WM_STATE属性描述了该窗口的状态信息。确定目标进程对应的窗口的_NET_WM_STATE属性中是否包含_NET_WM_STATE_HIDDEN值。若目标进程对应的窗口的_NET_WM_STATE属性中包含_NET_WM_STATE_HIDDEN值,则表明该窗口当前被最小化到任务栏中,因此可以基于Qt的QWidget类中的hide函数隐藏目标进程对应的水印窗口。
下面对本发明提供的基于Linux系统的应用程序窗口水印添加装置进行描述,下文描述的基于Linux系统的应用程序窗口水印添加装置与上文描述的基于Linux系统的应用程序窗口水印添加方法可相互对应参照。
基于上述任一实施例,图4是本发明提供的基于Linux系统的应用程序窗口水印添加装置的结构示意图,如图4所示,该装置包括:启动判定单元410、水印创建单元420、水印调整单元430和水印置顶单元440。
其中,启动判定单元410用于基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
水印创建单元420用于若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
水印调整单元430用于利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
水印置顶单元440用于获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
本发明实施例提供的装置,通过在目标进程对应的窗口之上创建位置和大小均与该窗口一致的水印窗口并一直保持该水印窗口在目标进程对应的窗口之上,可以将窗口水印添加操作与目标进程实现最大程度的脱钩、降低耦合度,不干扰原有程序的运行逻辑、不引入不确定因素,因此能够保证程序的完整运行性,从而兼顾应用程序信息的保护和应用程序运行安全性的保障。此外,本发明实施例采用的窗口水印添加方式均建立在Linux的X11之上,利用了不同实现框架下构建的进程窗口在Linux底层都基于X11实现,故而基于X11函数获取窗口信息并对窗口进行控制,因此从代码实现上无需考虑目标进程的实现框架,具有通用性,扩大了该方法的适用范围和灵活性。
基于上述任一实施例,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:
基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;
当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。
基于上述任一实施例,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:
基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;
基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。
基于上述任一实施例,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:
在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;
若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对所述水印窗口增加置顶属性,使得所述水印窗口在当前桌面上置顶。
基于上述任一实施例,所述基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口,之后还包括:
若所述目标进程对应的窗口不为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool)函数取消所述水印窗口的置顶属性。
基于上述任一实施例,所述基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,具体包括:
基于Linux X11的XQueryTree函数获取当前桌面的所有窗口的Window值,作为相应窗口的id;
基于Linux X11的XGetWindowProperty函数获取各个窗口的 _NET_WM_识别号值,作为相应窗口的进程识别号。
基于上述任一实施例,该装置还包括最小化单元,用于:
基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口。
基于上述任一实施例,所述基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口,具体包括:
基于Linux X11的XgetWindowProperty函数获取所述目标进程对应的窗口的_NET_WM_STATE属性;
确定所述目标进程对应的窗口的_NET_WM_STATE属性中是否包含_NET_WM_STATE_HIDDEN值;
若所述目标进程对应的窗口的_NET_WM_STATE属性中包含_NET_WM_STATE_HIDDEN值,则基于Qt的QWidget.hide函数隐藏所述水印窗口。
图5是本发明提供的电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、存储器(memory)520、通信接口(Communications Interface)530和通信总线540,其中,处理器510,存储器520,通信接口530通过通信总线540完成相互间的通信。处理器510可以调用存储器520中的逻辑指令,以执行基于Linux系统的应用程序窗口水印添加方法,该方法包括:基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
此外,上述的存储器520中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的基于Linux系统的应用程序窗口水印添加方法,该方法包括:基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的基于Linux系统的应用程序窗口水印添加方法,该方法包括:基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种基于Linux系统的应用程序窗口水印添加方法,其特征在于,包括:
基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
2.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,具体包括:
基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件;
当捕获到窗口移动事件和/或窗口大小调整事件时,基于所述目标进程对应的窗口的id确定相应事件是否关联所述目标进程对应的窗口;若相应事件关联所述目标进程对应的窗口,则从相应事件的消息结构体中获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息。
3.根据权利要求2所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述基于Linux X11的XselectInput函数和XnextEvent函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息,捕获窗口移动事件和窗口大小调整事件,具体包括:
基于所述XselectInput函数订阅StructureNotifyMask类型消息和PropertyChangeMask类型消息;
基于所述XnextEvent函数阻塞获取Xevent事件,以捕获窗口移动事件和窗口大小调整事件,并在捕获到窗口移动事件和/或窗口大小调整事件时接收相应事件对应的StructureNotifyMask消息和/或PropertyChangeMask消息。
4.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性,具体包括:
在所述水印窗口内创建查询线程以实时查询当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;
若所述目标进程对应的窗口为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool|Qt::X11BypassWindowManagerHint|Qt::WindowStaysOnTopHint)函数对所述水印窗口增加置顶属性,使得所述水印窗口在当前桌面上置顶。
5.根据权利要求4所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口,之后还包括:
若所述目标进程对应的窗口不为当前桌面的活跃窗口,则基于所述水印窗口的setWindowFlags(Qt::FramelessWindowHint|Qt::WindowTransparentForInput|Qt::Tool)函数取消所述水印窗口的置顶属性。
6.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,具体包括:
基于Linux X11的XQueryTree函数获取当前桌面的所有窗口的Window值,作为相应窗口的id;
基于Linux X11的XGetWindowProperty函数获取各个窗口的 _NET_WM_识别号值,作为相应窗口的进程识别号。
7.根据权利要求1所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,还包括:
基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口。
8.根据权利要求7所述的基于Linux系统的应用程序窗口水印添加方法,其特征在于,所述基于Linux X11函数监控所述目标进程对应的窗口是否被最小化到任务栏;若所述目标进程对应的窗口被最小化到任务栏,则隐藏所述水印窗口,具体包括:
基于Linux X11的XgetWindowProperty函数获取所述目标进程对应的窗口的_NET_WM_STATE属性;
确定所述目标进程对应的窗口的_NET_WM_STATE属性中是否包含_NET_WM_STATE_HIDDEN值;
若所述目标进程对应的窗口的_NET_WM_STATE属性中包含_NET_WM_STATE_HIDDEN值,则基于Qt的QWidget.hide函数隐藏所述水印窗口。
9.一种基于Linux系统的应用程序窗口水印添加装置,其特征在于,包括:
启动判定单元,用于基于Linux X11函数实时获取当前桌面的所有窗口的id和进程识别号,并基于所有窗口的进程识别号确定待添加水印的目标进程是否启动;
水印创建单元,用于若目标进程已启动,则确定所述目标进程对应的窗口的id,并基于所述目标进程对应的窗口的id在所述目标进程对应的窗口上层创建所述目标进程对应的水印窗口,并设置所述水印窗口的透明属性和鼠标穿透属性;
水印调整单元,用于利用Linux X11函数实时获取所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息,并基于所述目标进程对应的窗口的实时窗口坐标和/或实时大小信息设置所述水印窗口的位置和/或大小;
水印置顶单元,用于获取当前桌面的活跃窗口信息,并基于所述活跃窗口信息确定所述目标进程对应的窗口是否为当前桌面的活跃窗口;若所述目标进程对应的窗口为当前桌面的活跃窗口,则对所述水印窗口增加置顶属性。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述基于Linux系统的应用程序窗口水印添加方法。
CN202310753695.XA 2023-06-26 2023-06-26 基于Linux系统的应用程序窗口水印添加方法和装置 Pending CN116522299A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310753695.XA CN116522299A (zh) 2023-06-26 2023-06-26 基于Linux系统的应用程序窗口水印添加方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310753695.XA CN116522299A (zh) 2023-06-26 2023-06-26 基于Linux系统的应用程序窗口水印添加方法和装置

Publications (1)

Publication Number Publication Date
CN116522299A true CN116522299A (zh) 2023-08-01

Family

ID=87390497

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310753695.XA Pending CN116522299A (zh) 2023-06-26 2023-06-26 基于Linux系统的应用程序窗口水印添加方法和装置

Country Status (1)

Country Link
CN (1) CN116522299A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117556395A (zh) * 2024-01-10 2024-02-13 北京天空卫士网络安全技术有限公司 一种系统应用水印生成方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113761524A (zh) * 2021-09-03 2021-12-07 奇安信科技集团股份有限公司 激活窗口审计方法及系统
WO2022134361A1 (zh) * 2020-12-25 2022-06-30 平安科技(深圳)有限公司 屏幕水印显示方法、装置、电子设备及存储介质
CN115205087A (zh) * 2022-07-15 2022-10-18 平安科技(深圳)有限公司 屏幕水印生成方法、系统、设备及存储介质
CN115904589A (zh) * 2022-11-23 2023-04-04 北京安天网络安全技术有限公司 应用程序窗口水印处理方法、装置及电子设备
CN116127420A (zh) * 2022-12-14 2023-05-16 北京北信源软件股份有限公司 水印的添加方法和装置、存储介质、电子装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022134361A1 (zh) * 2020-12-25 2022-06-30 平安科技(深圳)有限公司 屏幕水印显示方法、装置、电子设备及存储介质
CN113761524A (zh) * 2021-09-03 2021-12-07 奇安信科技集团股份有限公司 激活窗口审计方法及系统
CN115205087A (zh) * 2022-07-15 2022-10-18 平安科技(深圳)有限公司 屏幕水印生成方法、系统、设备及存储介质
CN115904589A (zh) * 2022-11-23 2023-04-04 北京安天网络安全技术有限公司 应用程序窗口水印处理方法、装置及电子设备
CN116127420A (zh) * 2022-12-14 2023-05-16 北京北信源软件股份有限公司 水印的添加方法和装置、存储介质、电子装置

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
""Perfectly Flat-Top and Equiripple Flat-Top Cosine Windows"", 《 IEEE TRANSACTIONS ON INSTRUMENTATION AND MEASUREMENT ( VOLUME: 65, ISSUE: 7, JULY 2016)》, pages 1 - 4 *
JINWOYUNNI: ""X11获取新建窗口的windowID并操作相关函数"", 《HTTPS://BLOG.CSDN.NET/LYW13522476337/ARTICLE/DETAILS/80851769》, pages 1 - 4 *
天之骄龙: ""qt5--QWidget"", 《HTTPS://WWW.CNBLOGS.COM/LIMING19680104/P/11574568.HTML》, pages 1 - 6 *
李斌: ""任意窗口置顶器的设计与实现"", 《电脑编程技巧与维护》, pages 11 - 13 *
柴承训: ""Xlib Linux判断程序窗口是否为最小化"", 《HTTPS://WWW.CNBLOGS.COM/CHAICHENGXUN/P/15425655.HTML》, pages 1 - 3 *
雨田嘟嘟: ""窗口置顶"", 《HTTPS://BLOG.CSDN.NET/XULEISDJN/ARTICLE/DETAILS/111487384》, pages 1 - 3 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117556395A (zh) * 2024-01-10 2024-02-13 北京天空卫士网络安全技术有限公司 一种系统应用水印生成方法及装置
CN117556395B (zh) * 2024-01-10 2024-04-19 北京天空卫士网络安全技术有限公司 一种系统应用水印生成方法及装置

Similar Documents

Publication Publication Date Title
US8463075B2 (en) Dynamically resizing text area on a display device
US10552628B2 (en) Method and device for accessing and processing image
JP6442751B2 (ja) 情報処理装置、情報処理システム、制御方法、及びプログラム
US20170104893A1 (en) System and method of pixel manipulation and screen display disruption
US20090096810A1 (en) Method for selectively remoting windows
CN116522299A (zh) 基于Linux系统的应用程序窗口水印添加方法和装置
US9804767B2 (en) Light dismiss manager
CN112529757A (zh) 屏幕信息保护的方法、装置、计算机设备及可读存储介质
US10579807B2 (en) Preventing image capture data leaks
CN112650993B (zh) 屏幕水印显示方法、装置、电子设备及存储介质
US20230336690A1 (en) Masking video feedback loop during screen sharing
CN114969747B (zh) 一种桌面系统上安卓应用的限制截屏方法
CN115205087A (zh) 屏幕水印生成方法、系统、设备及存储介质
CN113552989A (zh) 录屏方法、装置及电子设备
CN115373878B (zh) 基于x框架的防截屏扩展协议实现系统
US9830202B1 (en) Storage and process isolated web widgets
US20220358234A1 (en) Masking Sensitive Information While Screensharing HTML Elements
US20230153402A1 (en) System and method for deterring data leakage through photographing of display screen by external camera
CN107729107B (zh) 一种模态对话框处理方法及装置
KR102066580B1 (ko) 캡쳐 데이터에 워터마크를 추가하는 프로그램과 화면 유출 파악 서비스 제공방법
CN107315970B (zh) 一种敏感数据的交互方法及装置
CN116028901A (zh) 一种嵌入水印的方法、装置、设备及存储介质
US20160210371A1 (en) Managing a web-based application's display
CN115168069A (zh) 基于Hook的放大镜穿透窗口方法、系统、装置和介质
CN114896625A (zh) 一种文件防泄漏方法、装置、电子设备及存储介质

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