2009-08-03 13 views
6

मैं सी/सी ++ प्रोग्राम के भीतर लिनक्स डेस्कटॉप (गनोम का उपयोग करके) वॉलपेपर कैसे बदलूं? क्या ऐसा करने के लिए कोई सिस्टम एपीआई है?प्रोग्रामिंग पर लिनक्स पर वॉलपेपर बदलना

+1

यदि आप यह पता लगाने कैसे, कृपया यह, मैं कुछ समय के लिए ऐसा करने में सक्षम होना चाहता था। – fauxCoder

उत्तर

9

हालांकि सवाल GNOME विशेष था, वहाँ भी वॉलपेपर जाता है कि उच्च स्तर उपकरणकिटें पर depepndant नहीं से निपटने के लिए एक तरीका है। आप xsetroot.c, सबसे दिलचस्प हिस्सा के स्रोत का अध्ययन करके (वास्तव में, जो वॉलपेपर है) जड़ खिड़की से निपटने के लिए सक्षम होना चाहिए, जिनमें से मैं यहाँ 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; 
} 
+0

धन्यवाद। यह पूरी तरह से काम करता है। – computergeek6

2

और कुछ नहीं, तो आप शायद यहाँ का सुझाव दिया कमांड लाइन से एक को लागू करने की system() इस्तेमाल कर सकते हैं, तो:

http://www.linuxquestions.org/questions/linux-general-1/change-background-via-command-line-350936/

+2

ओपी ने केन्या के बारे में पूछा, नहीं। –

+0

कौन परवाह करता है? लिंक्ड थ्रेड किसी भी सवाल का जवाब नहीं देता है। – innaM

+1

यदि आप थ्रेड में # 5 पोस्ट करने के लिए जाते हैं, तो gconftool-2 कमांड का उल्लेख किया गया है जो गनोम में पृष्ठभूमि चित्र सेट करता है। – Amber

18

आप gconf पुस्तकालय इस्तेमाल कर सकते हैं यह करने के लिए। gthumb परियोजना पर

// 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; 
} 

स्रोत ऊपर आधारित है: निम्न नमूना पृष्ठभूमि को बदलने के लिए एक पूरा कार्यक्रम है। यह निम्नलिखित तार के साथ संकलित किया जा सकता है:

gcc -Wall -g `pkg-config --libs --cflags glib-2.0 gconf-2.0` bkgmanage.c -o bkgmanage 
संबंधित मुद्दे