1

我尝试在 bash 脚本中获取窗口的最大大小(即屏幕大小减去屏幕边缘的面板)。我正在使用 Kubuntu,但如果它适用于任何 linux 系统,那就太好了。

目前,我的解决方案是通过 wmctrl 最大化活动窗口:

wmctrl -r :ACTIVE: -b add,maximized_horz,maximized_vert

然后通过 xwininfo 获取窗口的大小:

xwininfo -id $(xdotool getactivewindow)

不幸的是,我没有得到窗口的大小,而是得到了窗口的大小和它的边框(如果我删除了边框,我得到了预期的值)。

所以我的问题是:

1 - 是否有删除窗口边框的命令?(我只知道手动操作)

2 - 有没有更好的方法来做到这一点?(如果可以在不最大化窗口的情况下完成它可能会很棒)

在此先感谢您的帮助

4

3 回答 3

3

我意识到我所说的边框实际上是标题栏......如果我使用xwininfo -stats我确实得到了边框宽度(在我的情况下为 0)。标题栏高度(最大化窗口后)在Absolute upper-left字段中获得。以下给了我预期的高度:

eval $(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^  Height: \+\([0-9]\+\).*/Height=\1/p" -e "s/^  Absolute upper-left Y:  \+\([0-9]\+\).*/HeightTitleBar=\1/p")
Height=$(($Height+$HeightTitleBar))

谢谢你的帮助 !

于 2013-08-30T09:21:48.567 回答
1

这将获得您的高度、宽度和边框宽度:

{ read __ WIDTH; read __ HEIGHT; read __ __ BORDER_WIDTH; } < <(xwininfo -id "$(xdotool getactivewindow)" | grep -o -e 'Height:.*' -e 'Width:.*' -e 'Border width:.*')
echo "Height: $HEIGHT, Width: $WIDTH, Border width: $BORDER_WIDTH"

有了它,您现在有了 $HEIGHT、$WIDTH 和 $BORDER_WIDTH。您可以使用算术表达式重新计算那些:http: //tldp.org/LDP/abs/html/arithexp.html

于 2013-08-29T17:21:41.377 回答
0

我只检查了 KDE/Plasma,但是当你 xprop 一个窗口时,你可以从这两个条目之一获得装饰的测量值(值来自我的桌面):

_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 0, 0, 41, 4

_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 41, 4
于 2020-09-08T14:20:29.993 回答