Bir C/C++ programında Linux masaüstündeki (GNOME kullanarak) duvar kağıdını nasıl değiştirebilirim? Bunu yapmak için bir sistem API var mı?Linux'ta duvar kağıdını program aracılığıyla değiştirme
cevap
, ayrıca yüksek katman araci üzerinde depepndant değildir duvar kağıdı ile başa çıkmak için bir yol var. Sen xsetroot.c, en ilginç kısmının kaynağını inceleyerek (aslında, duvar kağıdı) kök penceresine başa gerekir hangi burada CopyPaste:
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;
}
Teşekkürler. Bu mükemmel çalışıyor. – computergeek6
başka bir şey, muhtemelen burada önerilen komuta satırlardan birini çağırmak için system()
kullanabilirsiniz ise: Bunu yapmak için gconf kütüphaneyi kullanabilirsiniz
http://www.linuxquestions.org/questions/linux-general-1/change-background-via-command-line-350936/
. gthumb proje üzerinde
// bkgmanage.c
#include <glib.h>
#include <gconf/gconf-client.h>
#include <stdio.h>
typedef enum {
WALLPAPER_ALIGN_TILED = 0,
WALLPAPER_ALIGN_CENTERED = 1,
WALLPAPER_ALIGN_STRETCHED = 2,
WALLPAPER_ALIGN_SCALED = 3,
WALLPAPER_NONE = 4
} WallpaperAlign;
gboolean set_as_wallpaper(const gchar *image_path, WallpaperAlign align)
{
GConfClient *client;
char *options = "none";
client = gconf_client_get_default();
// TODO: check that image_path is a file
if (image_path == NULL) options = "none";
else {
gconf_client_set_string(client,
"/desktop/gnome/background/picture_filename",
image_path,
NULL);
switch (align) {
case WALLPAPER_ALIGN_TILED: options = "wallpaper"; break;
case WALLPAPER_ALIGN_CENTERED: options = "centered"; break;
case WALLPAPER_ALIGN_STRETCHED: options = "stretched"; break;
case WALLPAPER_ALIGN_SCALED: options = "scaled"; break;
case WALLPAPER_NONE: options = "none"; break;
}
}
gboolean result = gconf_client_set_string(client,
"/desktop/gnome/background/picture_options",
options,
NULL);
g_object_unref(G_OBJECT(client));
return result;
}
int main(int argc, const char* argv[])
{
if (argc > 1) {
printf("Setting %s as wallpaper... ", argv[1]);
if (set_as_wallpaper(argv[1], WALLPAPER_ALIGN_STRETCHED)) printf("Ok\n");
else printf("Failed\n");
} else printf("Usage: ./bkgmanage <filename>\n");
return 0;
}
kaynak yukarıda dayanır: Aşağıdaki örnek arkaplan değiştirmek için komple bir programdır. Şu dizeyle derlenmiş olabilir: Soru gnome özgü olsa
gcc -Wall -g `pkg-config --libs --cflags glib-2.0 gconf-2.0` bkgmanage.c -o bkgmanage
- 1. Duvar kağıdını program aracılığıyla C++ ve windows api kullanarak değiştirme
- 2. Masaüstü duvar kağıdını düzenli aralıklarla program aracılığıyla değiştirme
- 3. Duvar kağıdını bir toplu iş dosyası ile değiştirme, program kapatma. Mümkün?
- 4. Program aracılığıyla başlatıcı etkinliğini değiştirme
- 5. Dikey modda canlı duvar kağıdını "sabitleme"
- 6. Yazı tipini Sistem Semibolduna program aracılığıyla değiştirme
- 7. iPhone duvar kağıdını (kilitli ekran arka planı) programsal olarak ayarlama?
- 8. Program işlevine program aracılığıyla erişme
- 9. Yüksek grafiklerde bir grafik başlığını program aracılığıyla değiştirme
- 10. MarkLogic 8 - XQuery - cts: search - Veritabanını program aracılığıyla değiştirme
- 11. Ekran parlaklığını program aracılığıyla değiştirme (güç parçacığındaki gibi)
- 12. Bir site için sharepoint simgesini program aracılığıyla değiştirme
- 13. NUnit program aracılığıyla çalıştırılıyor
- 14. Program aracılığıyla bir UIView
- 15. Program aracılığıyla Xcode
- 16. Program aracılığıyla RadioButtons oluşturma
- 17. Print FixedDocument program aracılığıyla
- 18. Program aracılığıyla Özelleştirme UITableViewCell
- 19. Program aracılığıyla UITableViewCell tokatlamak?
- 20. Program aracılığıyla oluşturulmuş UIPopoverPresentationController
- 21. Program aracılığıyla bir program oluşturucu oluşturun.
- 22. Android - duvar kağıdı görüntüsünü ayarlama
- 23. UILongPressGesture'u program aracılığıyla nasıl gönderebilirim?
- 24. Program aracılığıyla WCF istemcisi oluşturun
- 25. program aracılığıyla oluşturmaya çalışıyor rightBarButtonItem
- 26. Metin Alanları Oluşturma program aracılığıyla
- 27. Program aracılığıyla Fling ListView Android
- 28. Android profillerini program aracılığıyla değiştir
- 29. WCF IncludeExceptionDetailInFaults program aracılığıyla mı?
- 30. UIView boyutunun program aracılığıyla değiştirilmesi
yapacaksın, lütfen anlamaya Eğer Bunu bir süredir yapmak istedim. – fauxCoder