c – 在linux上使用桌面作为画布

我想知道是否有人可以帮助我.我有一个克隆linux的极客工具的计划.但我不知道你是否可以某种方式使用Linux桌面作为画布来绘制文本等.我​​试着谷歌但我什么都没发现.我需要做的是基本上能够在桌面的某些部分上绘制文本,使它看起来像是壁纸的一部分(来自c).无论是那个还是能够创建无边框,透明的窗口,可以点击并始终在背景上.如果有人能给我任何指示从哪里开始,我将非常高兴.

感谢您提前的帮助:]

解决方法:

你已经接受了部分答案,但我希望你仍然会读到这个.

按惯例,桌面背景确实是根窗口.但是,在典型的现代桌面上有两个重要的机制:

>根像素图设置(壁纸),它不是在根窗口的背景上绘制的
>通过用另一个基本级窗口阻碍根窗口来丰富桌面背景(例如可点击的图标)

如果你只想在背景上画画,只有后者对你很重要.如果您还想阅读背景,例如真实透明度,那么第一点也起作用.

绘制背景:

xsnow和xpenguins程序的作者是第一个处理这个问题的人.他们编写了一个聪明的函数,如果它们存在,可以派生出KDE和Gnome桌面窗口.由于阻碍根窗口的其他窗口管理器倾向于遵守这些事实上的标准,因此它非常可靠地工作.使用他们的代码,您可以立即知道要绘制到哪个窗口.

读取根背景(pixmap):

这更难.窗口像素的朴素查询将失败,因为所有前景窗口也是根窗口的一部分;这样可以很容易地做截图,但不能获得真实的背景.

然而,在根像素图的全局名称上有一个约定(由任何体面的背景像素图设置器使用).可以通过查询该名称找到pixmap.然而,如果背景设置器糟透了并且不遵守该规则,或者背景不是像素图,而只是模式或其他什么,那就会变得很讨厌.

我最近才发现的第二个选项是使用XDBE(双缓冲区)扩展来获取根窗口的背景.这非常干净,只需要两到三行代码,无论如何都可以使用.但是Xorg认为XDBE已被弃用(或者更确切地说,很快就会被弃用).所以我不知道是否仅为此目的使用它仍然是一个好主意.但我可以根据要求给你代码!

最后执行:

是的,有两种情况都可以实现.查看http://fopref.meinungsverstaerker.de/xmms-rootvis/
在该归档文件中,即GPL,getroot.c取自xpenguins,不依赖于其他xpenguins代码.
此外,从rootvis.c的第144行开始,您将找到获取背景像素图的代码.

玩得开心!

上一篇:XCB获取所有窗口X.Org的事件


下一篇:2021年9月