実行中のXプログラムのアイコンをダンプする方法は?


9

実行中のXプログラムのアイコンを取得する方法はありますか?ウィンドウを切り替えると、たとえばxfwm4を介して、そのアイコンが表示されます。


待って、それをシェル(ファイル)に入れますか、それともC ++にしますか?
Bobby

@Bobby何でもうまくいく..
デイジー

回答:


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ビットの10進整数のリストとして取得し、perlを使用してそれをグラフィック形式に変換することです(pamはRGBAであるのに_NET_WM_ICONはARGBなので、バイトを並べ替える必要がありましたが、ここでは簡単のためにpamを選択しました。

pam形式に関する注意事項。これはnetpbm形式であり、netpbmは由緒あるUnixイメージ操作ツールボックスです。しかし、さまざまな問題、主にライセンス問題のため、新しいnetpbmバージョンはdebianによるパッケージではないため、ubuntuのような派生物はこれは、ほとんどのPAM変換ユーティリティが存在しないことを意味します。新しいnetpbmを備えた他のシステムでは、上記の出力をパイプpamrgbatopng処理してpng画像を生成できます)


クールです。アイコンをダンプしてPNG形式に変換しました。
デイジー

0

このブログ投稿を偶然見つけました。それから引用するには:

これを実際に行う方法を示すために、実行中のXアプリケーションのウィンドウをユーザーが選択し、抽出したアイコンを引数として提供されるファイルに保存できるxgeticonという小さなプログラムを作成しました。


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;
}

このページから入手

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.