2010-12-23 194 views

回答

4

您可以使用XQueryPointer()來獲取鼠標位置。然後使用XQueryTree()獲取窗口列表。 XQueryTree()以適當的z順序返回窗口列表,以便您可以遍歷所有窗口,直到找到其邊界框位於指針下方的窗口,XGetWindowAttributes()將爲您提供找出邊界框所需的所有內容。我不確定你會怎樣處理窗戶。

我有幾年沒有使用X11,所以這可能是一個相當笨拙的方法,但它應該工作。我也沒有O'Reilly X11書籍,如果你打算使用低級別的X11作品,那麼你就需要親自閱讀其中的一本書;我認爲整個系列在這些日子裏可以免費上網。

+0

例如這裏:http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF – 2010-12-23 07:55:53

3

十多年來我還沒有編程X11,所以請原諒我,如果我得到這個錯誤。

我相信你可以在你的窗戶上註冊鼠標移動事件。如果通過將窗口句柄存儲在某個變量或其他變量中來處理此類事件,然後處理該事件以使其不會滲透到樹中,那麼當您想要識別該窗口時,您只需查詢該變量即可。

但是,這隻會在鼠標懸停在窗口上時註冊了合適的事件處理程序,因此您不會了解屬於其他應用程序的窗口 - 除非有辦法註冊其他人的事件這可能是可能的窗戶。

與其他答案相比,您不必遍歷整棵樹。缺點是你需要處理很多鼠標移動事件,並且可能無法找到其他人的窗戶。

我相信也可能有鼠標輸入和鼠標離開事件,這會減少所需的處理量。

相關問題