2011-10-19 46 views
3

如果你做xwininfo它會給你窗口ID,但是,這需要在目標窗口上單擊鼠標。有什麼辦法可以強制窗口管理器,或者至少建議窗口管理器使用特定的ID。像從shell啓動程序時是否可以分配窗口ID?

gedit windowid=0x12345678


東西我已經上傳一些文件到GitHub上(見herehere),這表明我如何設法解決這個問題。如果你看着他們,你會更好地感受到我正在嘗試做的事情。

+0

實際上是否將ID設置爲重要的,還是您希望查找特定窗口的ID而無需單擊它? – Kristofer

+0

@Kristofer,可能B是對的。那你會怎麼做?這並不容易。 – TMS

+0

@Kristofer是的,我需要窗口ID,以便我可以通過'wmctrl'移動它,但我認爲命令(即'gedit')在窗口管理器啓動窗口之前返回。所以如果你發出命令'gedit; ps; wmctrl -l -p'很有可能是gedit的進程ID會顯示在'ps'中,而不是'wmctrl -l -p' – puk

回答

1

不,這是不可能的。窗口ID由X服務器在XCreateWindow/XCreateSimpleWindow被調用時給出,並且無法改變它們,讓用戶選擇它們是非常危險和錯誤的。如果您打算查找窗口,則可以嘗試使用XQueryTree函數以及XGetWindowProperty和WM_CLASS屬性。

+0

那麼我想我必須使用'$!'來獲取進程ID並使用它們窗口ID,一旦它們加載。我簡直不敢相信沒有人創造這個。我想程序員會喜歡它,如果他們每次登錄他們不同的項目都會被加載到合適的工作區中。 – puk

+0

你說得對,但問題是X不直接支持工作區。工作區是作爲協議的一部分實現的,因此一些WM可能支持它們,而另一些則可能不支持。另外,協議只是一個接口,所以不同的WM可以用不同的方式處理工作空間。創建這樣一個工具並不是不可能的,但是你必須先了解X的工作原理。如果你想深入這一點,學習ICCCM和擴展ICCCM。無論如何,PID與窗口ID沒有一定的匹配方式,因爲在屏幕上顯示窗口的過程可能已經在不同的機器上運行了! – AlQafir

+0

作爲最後一個提示,我可以告訴你,如果你使用的WM支持擴展的ICCCM協議,你可以通過閱讀窗口的_NET_WM_PID屬性來找到PID,但是如果它不被WM支持,你將會得到沒有。 – AlQafir

相關問題