2010-07-13 82 views
1

如何在Linux中获得准确的窗口信息?我知道我可以使用wmctrl来获得窗口大小,但窗口的实际大小可能因窗口装饰而异。我需要以下信息和方法:如何在Linux(X)中获得准确的窗口信息(尺寸等)?

  • 精确窗口尺寸
  • 精确可用的屏幕空间(不包括像侏儒面板面板)
  • 设置一个窗口,以在一定的大小,包括装饰
  • 的能力

这样做的最好方法是什么?我对Python的工作感兴趣,所以有一些Python模块会更受欢迎。

在此先感谢!

+0

什么窗口库中使用? – Mark 2010-07-13 02:17:53

+0

我不确定你在问什么,@Mark。我使用的Ubuntu 10.04的Gnome桌面环境和Metacity作为我的窗口管理器。 – mellort 2010-07-13 02:22:07

+0

我认为马克假设你是从创建窗口的程序内完成这个操作的。你是否希望这是一个与窗口所有者分开运行的工具?我认为你可能在超级用户(http://superuser.com/)上有更多的运气。 – nmichaels 2010-07-15 14:44:27

回答

1

最好的办法是使用X11/Xlib的直接(文档:http://tronche.com/gui/x/xlib/

从您可能无法通过XQueryTree(树走根开始),并得到窗口通过XGetWindowAttributes属性()/ XGetGeometry() 。

好吧,这是一个C函数库,但也有一个Python端口:http://python-xlib.sourceforge.net/?page=documentation

+0

X11如何知道窗饰的大小? – mellort 2010-07-20 20:21:55

+0

由于窗口组织在树中,并且如果从其父窗口中减去子窗口的大小,您将获得装饰的大小。装饰中的关闭按钮通常也是X11-Windows。 '根窗口(桌面) - 顶级-窗口(窗口装饰) - 子窗口(可以是装饰或内容区域等的一部分) - 按钮etc' 这种方法并不总是有效,例如当Compiz打开时,Compiz绘制了绕过X11的窗口装饰(但我不确定) – nob 2010-07-22 10:49:35

+0

但是,您可以尝试一个简单的dump-testprogram并找出您感兴趣的窗口的哪一部分。您甚至可以抓取它的内容通过XGetImage()。 – nob 2010-07-22 10:53:40