Comment vider l'icône d'un programme X en cours d'exécution?
9
Existe-t-il un moyen d'obtenir l'icône d'un programme X en cours d'exécution? Lorsque vous basculez entre les fenêtres, vous pouvez voir son icône, par exemple via xfwm4.
Attendez, le voulez-vous via le shell (dans un fichier) ou via C ++?
Bobby
@Bobby ce qui fonctionne ..
daisy
Réponses:
9
Cela fonctionne pour moi. Peut ne pas fonctionner avec toutes les applications et tous les gestionnaires de fenêtres. Le pamformat est au moins pris en charge par ImageMagick, vous pouvez donc le visualiser avec displayet le convertir en d'autres formats si besoin est avec convert:
(et cliquez sur la fenêtre dont vous souhaitez obtenir l'icône, voir également l' -idoption de xprop )
L'idée est d'utiliser xprop pour obtenir la propriété sous la forme d'une liste d'entiers décimaux 32 bits et d'utiliser perl pour la convertir en un format graphique (pam choisi ici pour plus de simplicité même si j'ai dû réorganiser les octets car _NET_WM_ICON est ARGB tandis que pam est RGBA.
( Une note sur le format pam . Il est un netpbm format netpbm étant une boîte à outils de manipulation d'images Unix vénérable. Cependant, en raison de divers problèmes, les licences pour la plupart, des versions plus récentes netpbm ne sont pas des paquets par debian et en raison de ses dérivés comme ubuntu comme eh bien, ce qui signifie que la plupart des utilitaires de conversion pam ne sont pas présents là-bas. Sur d'autres systèmes qui ont un netpbm plus récent, vous pouvez diriger la sortie ci-dessus pamrgbatopngpour générer une image png)
Cool, j'ai vidé l'icône et l'ai convertie au format PNG.
daisy
0
Je suis tombé sur ce billet de blog. Pour en citer:
Pour démontrer comment cela peut être fait dans la pratique, j'ai écrit un petit programme appelé xgeticon qui permet à l'utilisateur de choisir la fenêtre d'une application X en cours d'exécution et d'enregistrer l'icône extraite dans le fichier fourni en argument.
#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;
}
Réponses:
Cela fonctionne pour moi. Peut ne pas fonctionner avec toutes les applications et tous les gestionnaires de fenêtres. Le
pam
format est au moins pris en charge par ImageMagick, vous pouvez donc le visualiser avecdisplay
et le convertir en d'autres formats si besoin est avecconvert
:(et cliquez sur la fenêtre dont vous souhaitez obtenir l'icône, voir également l'
-id
option de xprop )L'idée est d'utiliser xprop pour obtenir la propriété sous la forme d'une liste d'entiers décimaux 32 bits et d'utiliser perl pour la convertir en un format graphique (pam choisi ici pour plus de simplicité même si j'ai dû réorganiser les octets car _NET_WM_ICON est ARGB tandis que pam est RGBA.
( Une note sur le format pam . Il est un netpbm format netpbm étant une boîte à outils de manipulation d'images Unix vénérable. Cependant, en raison de divers problèmes, les licences pour la plupart, des versions plus récentes netpbm ne sont pas des paquets par debian et en raison de ses dérivés comme ubuntu comme eh bien, ce qui signifie que la plupart des utilitaires de conversion pam ne sont pas présents là-bas. Sur d'autres systèmes qui ont un netpbm plus récent, vous pouvez diriger la sortie ci-dessus
pamrgbatopng
pour générer une image png)la source
Je suis tombé sur ce billet de blog. Pour en citer:
la source
utiliser linux libwnck peut le faire
Je l'obtiens de cette page
la source