¿Cómo volcar el icono de un programa X en ejecución?
9
¿Hay alguna manera de obtener el ícono de un programa X en ejecución? Cuando cambia de una ventana a otra, puede ver su ícono, por ejemplo, a través de xfwm4.
Espera, ¿lo quieres a través del shell (en un archivo) o C ++?
Bobby
@Bobby lo que funcione ..
margarita
Respuestas:
9
Esto funciona para mi. Podría no funcionar con todas las aplicaciones y todos los administradores de ventanas. El pamformato es al menos compatible con ImageMagick, por lo que puede verlo displayy convertirlo a otros formatos si es necesario con convert:
(y haga clic en la ventana de la que desea obtener el icono, consulte también la -idopción de xprop )
La idea es usar xprop para obtener la propiedad como una lista de enteros decimales de 32 bits y usar perl para convertirlo a un formato gráfico (pam elegido aquí por simplicidad, aunque tuve que reordenar los bytes ya que _NET_WM_ICON es ARGB mientras que pam es RGBA.
( una nota sobre el formato pam . Es un formato netpbm , netpbm es una venerable caja de herramientas de manipulación de imágenes de Unix. Sin embargo, debido a varios problemas, principalmente licencias, las versiones más nuevas de netpbm no son paquetes de debian y, como resultado, sus derivados como ubuntu como bueno, lo que significa que la mayoría de las utilidades de conversión de pam no están presentes allí. En otros sistemas que tienen netpbm más nuevos, puede canalizar la salida anterior pamrgbatopngpara generar una imagen png)
Genial, volqué el icono y lo convertí a formato PNG.
Margarita
0
Me topé con esta publicación de blog. Para citarlo:
Para demostrar cómo se puede hacer esto en la práctica, escribí un pequeño programa llamado xgeticon que permitía al usuario elegir la ventana de una aplicación X en ejecución y guardar el icono extraído en el archivo proporcionado como argumento.
#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;
}
Respuestas:
Esto funciona para mi. Podría no funcionar con todas las aplicaciones y todos los administradores de ventanas. El
pam
formato es al menos compatible con ImageMagick, por lo que puede verlodisplay
y convertirlo a otros formatos si es necesario conconvert
:(y haga clic en la ventana de la que desea obtener el icono, consulte también la
-id
opción de xprop )La idea es usar xprop para obtener la propiedad como una lista de enteros decimales de 32 bits y usar perl para convertirlo a un formato gráfico (pam elegido aquí por simplicidad, aunque tuve que reordenar los bytes ya que _NET_WM_ICON es ARGB mientras que pam es RGBA.
( una nota sobre el formato pam . Es un formato netpbm , netpbm es una venerable caja de herramientas de manipulación de imágenes de Unix. Sin embargo, debido a varios problemas, principalmente licencias, las versiones más nuevas de netpbm no son paquetes de debian y, como resultado, sus derivados como ubuntu como bueno, lo que significa que la mayoría de las utilidades de conversión de pam no están presentes allí. En otros sistemas que tienen netpbm más nuevos, puede canalizar la salida anterior
pamrgbatopng
para generar una imagen png)fuente
Me topé con esta publicación de blog. Para citarlo:
fuente
utilizar Linux Libwnck puede hacerlo
Lo obtengo de esta página
fuente