Как сбросить значок запущенной программы X?

9

Есть ли способ получить значок работающей программы X? Когда вы переключаетесь между окнами, вы можете видеть его значок, например, через xfwm4.

маргаритка
источник
Подождите, вы хотите через оболочку (в файл) или через C ++?
Бобби
@ Бобби, что бы ни работало ..
маргаритка

Ответы:

9

Это работает для меня. Может работать не со всеми приложениями и всеми оконными менеджерами. 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-изображения)

Стефан Шазелас
источник
Круто, я сбросил значок и преобразовал его в формат PNG.
маргаритка
0

Я наткнулся на этот пост в блоге. Чтобы процитировать это:

Чтобы продемонстрировать, как это можно сделать на практике, я написал небольшую программу под названием xgeticon, которая позволяет пользователю выбрать окно работающего приложения X и сохранить извлеченный значок в файл, представленный в качестве аргумента.

Икем Крюгер
источник
0

использовать 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;
}

Я получил это с этой страницы

chikadance
источник