Apakah ada cara untuk mendapatkan ikon program X yang sedang berjalan? Ketika Anda beralih di antara windows, Anda bisa melihat ikonnya, misalnya melalui xfwm4.
Apakah ada cara untuk mendapatkan ikon program X yang sedang berjalan? Ketika Anda beralih di antara windows, Anda bisa melihat ikonnya, misalnya melalui xfwm4.
Jawaban:
Ini bekerja untuk saya. Mungkin tidak bekerja dengan semua aplikasi dan semua manajer jendela. The pam
Format setidaknya didukung oleh ImageMagick, sehingga Anda dapat melihatnya dengan display
dan 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 -id
opsi 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 pamrgbatopng
untuk menghasilkan gambar png)
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.
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