रनिंग एक्स प्रोग्राम के आइकन को डंप कैसे करें?


9

क्या एक रनिंग एक्स प्रोग्राम का आइकन पाने का कोई तरीका है? जब आप विंडोज़ के बीच स्विच करते हैं, तो आप इसका आइकन देख सकते हैं, जैसे xfwm4 के माध्यम से।


रुको, क्या आप इसे शेल (फ़ाइल में) या C ++ के माध्यम से चाहते हैं?
बॉबी

@ बॉबी जो भी काम करता है ..
daisy

जवाबों:


9

यह मेरे लिए काम करता है। सभी अनुप्रयोगों और सभी विंडो प्रबंधकों के साथ काम नहीं कर सकते। pamप्रारूप, कम से कम ImageMagick द्वारा समर्थित है, तो आप इसके साथ देख सकते हैं displayऔर यह अन्य प्रारूपों में कन्वर्ट अगर जरूरत के साथ हो सकता है convert:

xprop -notype 32c _NET_WM_ICON |
  perl -0777 -pe '@_=/\d+/g;
    printf "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\nMAXVAL 255\nTUPLTYPE RGB_ALPHA\nENDHDR\n", splice@_,0,2;
    $_=pack "N*", @_;
    s/(.)(...)/$2$1/gs' > icon.pam

(और उस विंडो पर क्लिक करें जिसे आप आइकन से प्राप्त करना चाहते हैं, xprop का -idविकल्प भी देखें )

संपत्ति को 32 बिट दशमलव पूर्णांकों की सूची के रूप में प्राप्त करने के लिए xprop का उपयोग करने और पर्ल को एक ग्राफिक्स प्रारूप में बदलने के लिए विचार करने का विचार है (पीएएम को सादगी के लिए यहां चुना गया हालांकि मुझे बाइट्स को फिर से व्यवस्थित करना पड़ा क्योंकि _NET_WM_RON एआरएमजी है जबकि पीएएम आरजीबीए है।

( पीएएम प्रारूप के बारे में एक नोट । यह एक नेटपीबीएम प्रारूप है, नेटपब्लम एक आदरणीय यूनिक्स छवि हेरफेर टूलबॉक्स है। हालांकि, विभिन्न मुद्दों के कारण, ज्यादातर लाइसेंस देने वाले, नए नेटपबम संस्करण डेबियन के लिए पैकेज नहीं हैं और परिणामस्वरूप ओबंटु जैसे इसके डेरिवेटिव। अच्छी तरह से, जिसका अर्थ है कि अधिकांश pam रूपांतरण उपयोगिताओं में मौजूद नहीं हैं। अन्य प्रणालियों पर जो नए netpbm हैं, आप pamrgbatopngpng छवि उत्पन्न करने के लिए ऊपर दिए गए आउटपुट को पाइप कर सकते हैं )


कूल, मैंने आइकन को डंप किया और इसे पीएनजी प्रारूप में बदल दिया।
डेज़ी

0

मैं इस ब्लॉग पोस्ट पर ठोकर खाई । इससे उद्धृत करने के लिए:

यह प्रदर्शित करने के लिए कि यह व्यवहार में कैसे किया जा सकता है, मैंने xgeticon नामक एक छोटा सा प्रोग्राम लिखा, जो उपयोगकर्ता को एक रनिंग एक्स एप्लिकेशन की विंडो चुनने देता है और निकाले गए आइकन को तर्क के रूप में दी गई फाइल में सेव करता है।


0

linux libwnck का उपयोग कर सकते हैं

#define WNCK_I_KNOW_THIS_IS_UNSTABLE = 1

#include <libwnck/libwnck.h>

int main(int argc,
         char **argv) {
    WnckScreen *screen;

    gdk_init(&argc, &argv);

    screen = wnck_screen_get_default();

    wnck_screen_force_update(screen);

    auto win = wnck_window_get(127926341); // 127926341 is window id, it can be get by linux cli xdotool or wmctrl or other many clis
    GdkPixbuf *r = wnck_window_get_icon(win);
    GError *err = NULL;
    gdk_pixbuf_save(r, "/tmp/prpr.png", "png", &err, "quality", "100", NULL);
    return 0;
}

मैं इसे इस पृष्ठ से प्राप्त करता हूं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.