Есть ли способ получить значок работающей программы X? Когда вы переключаетесь между окнами, вы можете видеть его значок, например, через xfwm4.
Есть ли способ получить значок работающей программы X? Когда вы переключаетесь между окнами, вы можете видеть его значок, например, через xfwm4.
Ответы:
Это работает для меня. Может работать не со всеми приложениями и всеми оконными менеджерами. pam
Формат, по крайней мере поддерживается ImageMagick, так что вы можете просмотреть его display
и конвертировать его в другие форматы , в случае необходимости с 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
(и нажмите на окно, из которого вы хотите получить значок, см. также параметр xprop -id
)
Идея состоит в том, чтобы использовать xprop для получения свойства в виде списка 32-битных десятичных целых чисел и использовать perl для преобразования его в графический формат (здесь pam выбран для простоты, хотя мне пришлось изменить порядок байтов, поскольку _NET_WM_ICON - это ARGB, а pam - это RGBA.
( примечание о формате pam . Это формат netpbm , netpbm - почтенный набор инструментов для работы с изображениями Unix. Однако из-за различных проблем, в основном лицензионных, более новые версии netpbm не являются пакетами Debian, и в результате его производные, такие как ubuntu as хорошо, что означает, что большинство утилит преобразования pam там не присутствуют. В других системах, которые имеют более новую версию netpbm, вы можете передать вышеприведенный вывод pamrgbatopng
для генерации png-изображения)
Я наткнулся на этот пост в блоге. Чтобы процитировать это:
Чтобы продемонстрировать, как это можно сделать на практике, я написал небольшую программу под названием xgeticon, которая позволяет пользователю выбрать окно работающего приложения X и сохранить извлеченный значок в файл, представленный в качестве аргумента.
использовать linux libwnck может сделать это
#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;
}
Я получил это с этой страницы