如何在C/C++程序中(使用GNOME)在Linux桌面上更改墙纸?是否有系统API可以执行此操作?
最佳答案
尽管该问题是针对gnome的,但还有一种方法可以处理在高层工具包中不占优势的墙纸。通过研究xsetroot.c的来源,您应该能够处理根窗口(实际上是墙纸),我在此处复制粘贴了最有趣的部分:
static void
SetBackgroundToBitmap(Pixmap bitmap, unsigned int width, unsigned int height)
{
Pixmap pix;
GC gc;
XGCValues gc_init;
gc_init.foreground = NameToPixel(fore_color, BlackPixel(dpy, screen));
gc_init.background = NameToPixel(back_color, WhitePixel(dpy, screen));
if (reverse) {
unsigned long temp=gc_init.foreground;
gc_init.foreground=gc_init.background;
gc_init.background=temp;
}
gc = XCreateGC(dpy, root, GCForeground|GCBackground, &gc_init);
pix = XCreatePixmap(dpy, root, width, height,
(unsigned int)DefaultDepth(dpy, screen));
XCopyPlane(dpy, bitmap, pix, gc, 0, 0, width, height, 0, 0, (unsigned long)1);
XSetWindowBackgroundPixmap(dpy, root, pix);
XFreeGC(dpy, gc);
XFreePixmap(dpy, bitmap);
if (save_colors)
save_pixmap = pix;
else
XFreePixmap(dpy, pix);
XClearWindow(dpy, root);
unsave_past = 1;
}
关于c++ - 以编程方式在Linux上更改墙纸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1220826/