Window-Manager

讀取非客戶區的 X 視窗屬性

  • March 6, 2019

如何讀取 X 視窗非客戶區(視窗管理器視窗)的屬性?XChangeProperty我在我的 C 程序中設置了 X 屬性。通過滑鼠使用xprop和選擇非客戶區(我的意思是:視窗的標題欄)時,我的應用程序創建的視窗的屬性不會顯示。我測試了這兩種情況。使用時xprop 8s name_of_non_registered_propertyxprop 8s name_of_registered_property消息不同,所以我更正創建XAtom。

我只在 Plasma5.15 上測試 xprop(KWin 在 X.org 下工作)

我正在混合 GTK+2 和 XCB(或 XLib)程式碼。當使用XListProperty,XGetAtomName來自先前呼叫先前函式的元素和XGetAtomNameput 到puts(C stdlib) 的結果時,我的原子的名稱是可見的。第一次呼叫主循環時,可能是 GTK 混亂?在將我的屬性添加到它之前,我意識到了視窗。

我認為,這與其說是系統問題,不如說是程式問題。

> xwininfo -all -root
....
0xba00001 "program": ("program" "Program")  10x10+10+10  +10+10
   1 child:
   0xba00002 (has no name): ()  1x1+-1+-1  +9+9
...
>xprop -id 0xba00001
WM_CLASS(STRING) = "program", "Program"
WM_COMMAND(STRING) = { "program" }
_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0xba00002
_KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 29562975
WM_CLIENT_LEADER(WINDOW): window id # 0xba00001
_NET_WM_PID(CARDINAL) = 25223
WM_LOCALE_NAME(STRING) = "pl_PL.UTF-8"
WM_CLIENT_MACHINE(STRING) = "linux-rvnb"
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified size: 10 by 10
>xprop -id 0xba00002
>

此命令列印所有子項:

xwininfo -all -root

並非所有視窗管理器都使用根視窗來顯示背景。點擊非客戶區將顯示有關顯示背景的視窗的資訊。要顯示有關根視窗的資訊,請使用:

xprop -root

如果您正確設置了一個原子,xprop則可以讀取它。命令中的格式部分xprop不是必需的:

xprop name_of_registered_property

您可能必須遍歷所有孩子才能找到帶有您的原子的視窗。

如果您沒有編寫 wm 程式碼,則應忽略標題欄。它們是 wm 內部人員,而不是客戶端,並且可能未註冊事件。

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