如何使用X11获取当前光标位于其上的窗口?

时间:2010-12-23 02:09:11

标签: c++ c x11 xorg xserver

如何检索光标位于X11服务器顶部的顶部窗口?

窗口不必是“活动的”(选择,打开,无论如何),它只需要将光标悬浮在它上面。

提前致谢。

2 个答案:

答案 0 :(得分:6)

您可以使用XQueryPointer()来获取鼠标位置。然后使用XQueryTree()获取一个窗口列表。 XQueryTree()以正确的z顺序返回窗口列表,这样您就可以遍历所有窗口,直到找到一个边界框在指针下面的窗口,XGetWindowAttributes()将为您提供找出所需的所有内容边界框。我不知道你会用塑造窗户做什么。

我几年没有使用X11,所以这可能是一个相当笨重的方法,但它应该工作。我也没有我的O'Reilly X11书籍了,如果你打算使用低级别的X11,那么你会想要把它放在书中。我认为这几天整个系列都是免费在线提供的。

答案 1 :(得分:3)

我没有编写X11超过十年,所以请原谅我,如果我错了。

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

然而,只有在鼠标位于已注册合适事件处理程序的窗口上时才会有效,因此您不会知道属于其他应用程序的窗口 - 除非有办法在其他人的窗口上注册事件这可能是可能的。

优于其他答案的优点是您不必遍历整棵树。缺点是你需要处理很多鼠标移动事件,它可能无法找到其他人的窗口。

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