9

私はバージョン 3.. で迷っています python2+gdk2 は:

#!/usr/bin/env python2
import gtk

gtk.gdk.window_process_all_updates()
window_xid = 54525964
gdk_window = gtk.gdk.window_foreign_new(window_xid)

これはかなり簡単です。しかし、その後、恐怖:

#!/usr/bin/env python3
from gi.repository import xlib
from gi.repository import Gdk
from gi.repository import GdkX11

Gdk.Window.process_all_updates()
xlib_window = "???????"
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)

xlib が私を殺している..私はそれで何もできません。誰かが以前にそれを使ったことがありますか??

私がすでに何度か経験したドキュメントは次のとおりです: Gdk3Xlib

xid からウィンドウを取得することは、python2 でスクリーンショットを取得する最速の方法でした。python3 で別の方法を試してみると思います。多分ルートウィンドウからpeek_children?? しかし、それが私が望むウィンドウであるかどうかをどのように知ることができますか?

4

1 に答える 1

14

X11の AWindowは、 と同じXIDです。一方から他方へのtypedefだけがあります。

したがって、C コードでは、基本的に整数であるorgdk_x11_window_foreign_new_for_display()を受け入れるだけです。これは、イントロスペクションを使用して Python でも機能します。WindowXID

#!/usr/bin/env python3
from gi.repository import Gdk
from gi.repository import GdkX11

Gdk.Window.process_all_updates()
xlib_window = 0x2a00005 # from xwininfo command
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
print(gdk_window.get_geometry())
于 2011-11-01T08:24:36.233 に答える