Come scaricare l'icona di un programma X in esecuzione?


9

C'è un modo per ottenere l'icona di un programma X in esecuzione? Quando si passa da una finestra all'altra, è possibile visualizzarne l'icona, ad esempio tramite xfwm4.


Aspetta, lo vuoi tramite la shell (in un file) o via C ++?
Bobby,

@Bobby qualunque cosa funzioni ..
Daisy,

Risposte:


9

Questo funziona per me. Potrebbe non funzionare con tutte le applicazioni e tutti i gestori di finestre. Il pamformato è almeno supportato da ImageMagick, quindi puoi visualizzarlo displaye convertirlo in altri formati se necessario con 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

(e fai clic sulla finestra da cui vuoi ottenere l'icona, vedi anche l' -idopzione di xprop )

L'idea è di usare xprop per ottenere la proprietà come un elenco di numeri decimali a 32 bit e usare perl per convertirlo in un formato grafico (pam scelto qui per semplicità anche se ho dovuto riordinare i byte poiché _NET_WM_ICON è ARGB mentre pam è RGBA.

( una nota sul formato pam . È un formato netpbm , netpbm è un venerabile toolbox di manipolazione delle immagini Unix. Tuttavia, a causa di vari problemi, principalmente quelli di licenza, le versioni più recenti di netpbm non sono pacchetti di debian e di conseguenza i suoi derivati ​​come ubuntu as bene, il che significa che la maggior parte delle utility di conversione pam non sono presenti lì. Su altri sistemi che hanno netpbm più recente, è possibile reindirizzare l'output sopra pamrgbatopngper generare un'immagine png)


Bene, ho scaricato l'icona e l'ho convertita in formato PNG.
margherita,

0

Mi sono imbattuto in questo post del blog. Per citare da esso:

Per dimostrare come ciò può essere fatto in pratica, ho scritto un piccolo programma chiamato xgeticon che consente all'utente di scegliere la finestra di un'applicazione X in esecuzione e salvare l'icona estratta nel file fornito come argomento.


0

usare linux libwnck può farlo

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

Ho capito da questa pagina

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.