当前位置: 首页 > news >正文

Linux系统窗口水印难点分析

给应用程序加水印是保护数据的一种方式,window上可以通过给进程通过注入的方法给进程的窗口创建一个同大小的副窗口,在副窗口上绘制水印内容,同时设置副窗口透明同时透传事件,这样就可以达到在源窗口上显示水印的效果且不影响程序使用,借助window的思路想在国产化linux上完成窗口水印,发现创建的副窗口无法对源窗口透明,使用了qt, gtk甚至是x11 api,尝试各个参数都显示黑色,查看x11文档,发现透明效果是通过x11的窗口合成器(例如xcompmgr)实现的,查看xcompmgr源码发现,窗口合成器在处理窗口的透明效果时仅仅处理toplevel窗口(顶层窗口)间的透明,不处理子窗口的透明属性,我们日常中碰到的子窗口透明,例如使用qt创建的应用,其子窗口透明是qt框架自己渲染出来的,而对应x11窗口句柄,子窗口无法实现透明效果,下面的代码是摘自有xcompmgr源码main函数中的部分,其中的add_win函数添加的窗口是合成器要处理的窗口,XQueryTree获取的只有顶层窗口,因此在国产化linux上实现窗口水印不能单纯的通过创建透明副窗口来实现。

    root_width = DisplayWidth (dpy, scr);root_height = DisplayHeight (dpy, scr);rootPicture = XRenderCreatePicture (dpy, root,XRenderFindVisualFormat (dpy,DefaultVisual (dpy, scr)),CPSubwindowMode,&pa);blackPicture = solid_picture (dpy, True, 1, 0, 0, 0);if (compMode == CompServerShadows)transBlackPicture = solid_picture (dpy, True, 0.3, 0, 0, 0);allDamage = None;clipChanged = True;XGrabServer (dpy);if (autoRedirect)XCompositeRedirectSubwindows (dpy, root, CompositeRedirectAutomatic);else{XCompositeRedirectSubwindows (dpy, root, CompositeRedirectManual);XSelectInput (dpy, root,SubstructureNotifyMask|ExposureMask|StructureNotifyMask|PropertyChangeMask);XShapeSelectInput (dpy, root, ShapeNotifyMask);XQueryTree (dpy, root, &root_return, &parent_return, &children, &nchildren);for (unsigned int i = 0; i < nchildren; i++)add_win (dpy, children[i], i ? children[i-1] : None);XFree (children);}XUngrabServer (dpy);ufd.fd = ConnectionNumber (dpy);ufd.events = POLLIN;if (!autoRedirect)paint_all (dpy, None);for (;;)
5a15afa9c1284be6a6368ae55981bf2e.png

Wps窗口水印实现

 

http://www.lryc.cn/news/414153.html

相关文章:

  • LabVIEW与CANopen实现自动化生产线的设备控制与数据采集
  • 吃惊!这个Windows双系统方法逆天了|UEFI篇
  • 【C语言基础】C语言试题复习
  • 一拖三无线充底座-带给你极致的便利生活
  • 探索 Electron:打造深度书籍挖掘机的搜索体验
  • tomato靶场
  • 【Vue】computed计算对象不生效问题?
  • 算法小白的进阶之路(力扣9~12)
  • DOCKER容器中安装JDK1. 8 详细步骤
  • 计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • 深度学习常见的卷积和注意力机制文章集锦(持续更新)
  • 如何在立创EDA的PCB电路板导入logo图案
  • springboot集成canal
  • leetcode数论(2447. 最大公因数等于 K 的子数组数目)
  • 实现数组扁平化的几种方式
  • 3D打印技术正悄然重塑模具工业格局
  • 深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战
  • YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)
  • 学习安卓开发遇到的问题
  • 数学建模--禁忌搜索
  • LeetCode 第136场双周赛个人题解
  • The operation was rejected by your operating system. code CERT_HAS_EXPIRED报错解决
  • [Git][基本操作]详细讲解
  • springMVC中从Excel文件中导入导出数据
  • C++的STL简介(三)
  • BERT模型
  • 举例说明计算机视觉(CV)技术的优势和挑战
  • Animate软件基础:关于补间动画中的图层
  • mac|安装hashcat(压缩包密码p解)
  • 【保姆级系列:锐捷模拟器的下载安装使用全套教程】