在 Unity 中獲取完整的視窗尺寸(包括裝飾)
我已經使用瞭如何準確找到窗戶尺寸和位置(包括裝飾品)的答案?在我的 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