Wie wird das Symbol eines laufenden X-Programms ausgegeben?
9
Gibt es eine Möglichkeit, das Symbol eines laufenden X-Programms zu erhalten? Wenn Sie zwischen Fenstern wechseln, können Sie das Symbol sehen, z. B. über xfwm4.
Warten Sie, möchten Sie es über die Shell (in eine Datei) oder über C ++?
Bobby
@ Bobby was auch immer funktioniert ..
Gänseblümchen
Antworten:
9
Das funktioniert bei mir. Funktioniert möglicherweise nicht mit allen Anwendungen und allen Fenstermanagern. Das pamFormat wird zumindest von ImageMagick unterstützt, sodass Sie es anzeigen displayund bei Bedarf in andere Formate konvertieren können convert:
(und klicken Sie auf das Fenster, aus dem Sie das Symbol erhalten möchten, siehe auch die -idOption von xprop )
Die Idee ist, xprop zu verwenden, um die Eigenschaft als Liste von 32-Bit-Dezimalzahlen abzurufen, und Perl zu verwenden, um diese in ein Grafikformat zu konvertieren (pam wurde hier der Einfachheit halber ausgewählt, obwohl ich die Bytes neu anordnen musste, da _NET_WM_ICON ARGB ist, während pam RGBA ist.
( Ein Hinweis zum Pam-Format . Es handelt sich um ein Netpbm- Format, wobei Netpbm eine ehrwürdige Unix-Bildbearbeitungs-Toolbox ist. Aufgrund verschiedener Probleme, hauptsächlich der Lizenzierung, sind neuere Netpbm-Versionen jedoch keine Pakete von Debian und daher seine Derivate wie Ubuntu as Nun, was bedeutet, dass die meisten Pam-Konvertierungsprogramme dort nicht vorhanden sind. Auf anderen Systemen mit neuerem Netpbm können Sie die obige Ausgabe weiterleiten, pamrgbatopngum ein PNG-Image zu generieren.
Cool, ich habe das Symbol ausgegeben und es in das PNG-Format konvertiert.
Gänseblümchen
0
Ich bin auf diesen Blog-Beitrag gestoßen . Um daraus zu zitieren:
Um zu demonstrieren, wie dies in der Praxis gemacht werden kann, habe ich ein kleines Programm namens xgeticon geschrieben, mit dem der Benutzer das Fenster einer laufenden X-Anwendung auswählen und das extrahierte Symbol in der als Argument bereitgestellten Datei speichern kann.
#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;
}
Antworten:
Das funktioniert bei mir. Funktioniert möglicherweise nicht mit allen Anwendungen und allen Fenstermanagern. Das
pam
Format wird zumindest von ImageMagick unterstützt, sodass Sie es anzeigendisplay
und bei Bedarf in andere Formate konvertieren könnenconvert
:(und klicken Sie auf das Fenster, aus dem Sie das Symbol erhalten möchten, siehe auch die
-id
Option von xprop )Die Idee ist, xprop zu verwenden, um die Eigenschaft als Liste von 32-Bit-Dezimalzahlen abzurufen, und Perl zu verwenden, um diese in ein Grafikformat zu konvertieren (pam wurde hier der Einfachheit halber ausgewählt, obwohl ich die Bytes neu anordnen musste, da _NET_WM_ICON ARGB ist, während pam RGBA ist.
( Ein Hinweis zum Pam-Format . Es handelt sich um ein Netpbm- Format, wobei Netpbm eine ehrwürdige Unix-Bildbearbeitungs-Toolbox ist. Aufgrund verschiedener Probleme, hauptsächlich der Lizenzierung, sind neuere Netpbm-Versionen jedoch keine Pakete von Debian und daher seine Derivate wie Ubuntu as Nun, was bedeutet, dass die meisten Pam-Konvertierungsprogramme dort nicht vorhanden sind. Auf anderen Systemen mit neuerem Netpbm können Sie die obige Ausgabe weiterleiten,
pamrgbatopng
um ein PNG-Image zu generieren.quelle
Ich bin auf diesen Blog-Beitrag gestoßen . Um daraus zu zitieren:
quelle
Verwenden Sie Linux Libwnck kann es tun
Ich bekomme es von dieser Seite
quelle