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.
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:
(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)
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.
#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;
}
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 dengandisplay
dan mengubahnya menjadi format lain jika perlu denganconvert
:(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)sumber
Saya menemukan posting blog ini . Mengutipnya:
sumber
menggunakan libwnck linux bisa melakukannya
Saya mendapatkannya dari halaman ini
sumber