2010-12-23 192 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,所以请原谅我,如果我得到这个错误。

我相信你可以在你的窗户上注册鼠标移动事件。如果通过将窗口句柄存储在某个变量或其他变量中来处理此类事件,然后处理该事件以使其不会渗透到树中,那么当您想要识别该窗口时,您只需查询该变量即可。

但是,这只会在鼠标悬停在窗口上时注册了合适的事件处理程序,因此您不会了解属于其他应用程序的窗口 - 除非有办法注册其他人的事件这可能是可能的窗户。

与其他答案相比,您不必遍历整棵树。缺点是你需要处理很多鼠标移动事件,并且可能无法找到其他人的窗户。

我相信也可能有鼠标输入和鼠标离开事件,这会减少所需的处理量。

相关问题