Scripting

在 Unity 中獲取完整的視窗尺寸(包括裝飾)

  • June 9, 2019

我已經使用瞭如何準確找到窗戶尺寸和位置(包括裝飾品)的答案?在我的 bash 腳本中,並且在 Xfce 上使用Silentcast應用程序取得了很好的成功,但現在其他人正在使用它,他們在 Ubuntu 14.04、Unity 中發現了一些問題。這是由以下輸出引起的一個問題:

xwininfo -id $(xdotool getactivewindow)

顯示:

Relative upper-left X:  0  
Relative upper-left Y:  0

我用它來計算邊框的寬度和標題欄的高度。它們不應該為 0。

有誰知道如何在 Unity for Ubuntu 14.04 中獲取視窗邊框的寬度和標題欄的高度。

或者,如何直接獲取完整的視窗尺寸?

我已經為 xwininfo 包https://bugs.freedesktop.org/show_bug.cgi?id=84348送出了針對 xorg 的錯誤

我還發現了有關在 Ubuntu 14.04 下在 Unity 中創建自己的主題的資訊:https ://wiki.ubuntu.com/Unity/Theming

似乎答案就在某個主題頁面中,但我還不明白,尤其是因為我不使用 Ubuntu 或 Unity。

我還在stackoverflow上問了這個問題,得到了一個很好的答案,我標記為正確的答案並贊成:https ://stackoverflow.com/a/26060527/1707904

這也適用於 compiz。您可以通過以下幾種方式獲取這些資訊:

wnckprop --xid=$(xdotool getactivewindow)

否則,您可以將您從 xwininfo 獲得的絕對值與可訪問的裝飾大小混合使用:

xprop _NET_FRAME_EXTENTS -id $(xdotool getactivewindow)

供您參考,如果您想獲得完整的幀大小,包括視窗周圍的輸入區域,您可以使用xwininfo -frame

經過實驗,我更好地理解了“輸入區域”在 Ubuntu 中的含義。由於邊框預設大小為 0,因此視窗周圍有一個 10 像素的區域,您可以在其中抓取視窗以調整大小。它可能有其他用途,但輸入區域基本上就像一個不可見的 10px 邊框。因此,來自 xwininfo 的 Absolute 給出了內部視窗,而 xwininfo -frame 給出了整個視窗,包括標題欄和周圍的額外 10 像素(如果輸入區域為 10 像素)。xprop… 只給出裝飾的大小,不包括輸入區域。因此,需要所有 3 個命令才能全面了解視窗的幾何形狀。

這是我最終使用的程式碼(它忽略了不可見的輸入區域):

eval $(xwininfo -id "$aw" |
     sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
            -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
            -e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
            -e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
if [ "$entire" = true ]
then
   extents=$(xprop _NET_FRAME_EXTENTS -id "$aw" | grep "NET_FRAME_EXTENTS" | cut -d '=' -f 2 | tr -d ' ')
   bl=$(echo $extents | cut -d ',' -f 1) # width of left border
   br=$(echo $extents | cut -d ',' -f 2) # width of right border
   t=$(echo $extents | cut -d ',' -f 3)  # height of title bar
   bb=$(echo $extents | cut -d ',' -f 4) # height of bottom border

   let x=$x-$bl
   let y=$y-$t
   let w=$w+$bl+$br
   let h=$h+$t+$bb
fi

引用自:https://unix.stackexchange.com/questions/157613