Bagaimana cara membuang ikon program X yang sedang berjalan?

9

Apakah ada cara untuk mendapatkan ikon program X yang sedang berjalan? Ketika Anda beralih di antara windows, Anda bisa melihat ikonnya, misalnya melalui xfwm4.

bunga aster
sumber
Tunggu, apakah Anda menginginkannya melalui shell (ke dalam file) atau melalui C ++?
Bobby
@ Bobby apa pun yang bekerja ..
daisy

Jawaban:

9

Ini bekerja untuk saya. Mungkin tidak bekerja dengan semua aplikasi dan semua manajer jendela. The pamFormat setidaknya didukung oleh ImageMagick, sehingga Anda dapat melihatnya dengan displaydan mengubahnya menjadi format lain jika perlu dengan 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

(dan klik pada jendela tempat Anda ingin mendapatkan ikonnya, lihat juga -idopsi xprop )

Idenya adalah menggunakan xprop untuk mendapatkan properti sebagai daftar bilangan bulat desimal 32 bit dan menggunakan perl untuk mengubahnya menjadi format grafis (pam dipilih di sini untuk kesederhanaan meskipun saya harus menyusun ulang byte karena _NET_WM_ICON adalah ARGB sedangkan pam adalah RGBA.

( catatan tentang format pam . Ini adalah format netpbm , netpbm menjadi kotak alat manipulasi gambar Unix yang terhormat. Namun, karena berbagai masalah, sebagian besar masalah perizinan, versi netpbm yang lebih baru bukan paket oleh debian dan akibatnya turunannya seperti ubuntu sebagai baik, yang berarti bahwa sebagian besar utilitas konversi pam tidak ada di sana. Pada sistem lain yang memiliki netpbm baru, Anda dapat menyalurkan output di atas pamrgbatopnguntuk menghasilkan gambar png)

Stéphane Chazelas
sumber
Keren, saya membuang ikon dan mengubahnya ke format PNG.
daisy
0

Saya menemukan posting blog ini . Mengutipnya:

Untuk menunjukkan bagaimana hal ini dapat dilakukan dalam praktek, saya menulis sebuah program kecil bernama xgeticon yang memungkinkan pengguna memilih jendela aplikasi X yang sedang berjalan dan menyimpan ikon yang diekstrak ke dalam file yang disediakan sebagai argumen.

Ikem Krueger
sumber
0

menggunakan libwnck linux bisa melakukannya

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

Saya mendapatkannya dari halaman ini

chikadance
sumber