Як скинути піктограму запущеної програми 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

(і натисніть на вікно, з якого ви хочете отримати піктограму, див. також -idопцію xprop )

Ідея полягає у використанні xprop для отримання властивості як списку 32-бітних десяткових цілих чисел та використання perl для перетворення цього у графічний формат (пам., Обраний тут для простоти, хоча мені довелося перевпорядкувати байти, оскільки _NET_WM_ICON - ARGB, а pam - RGBA.

( примітка про формат pam . Це формат netpbm , що netpbm є поважним пакетом інструментів для маніпулювання зображенням Unix. Однак через різні проблеми, в основному ліцензійні, новіші версії netpbm не є пакетами debian, і як результат, його похідні, такі як ubuntu як ну, це означає, що більшості утиліт перетворення пам. там немає. На інших системах, які мають новіший 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;
}

Я отримую це з цієї сторінки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.