如何检索光标位于X11服务器顶部的顶部窗口?
窗口不必是“活动的”(选择,打开,无论如何),它只需要将光标悬浮在它上面。
提前致谢。
答案 0 :(得分:6)
您可以使用XQueryPointer()
来获取鼠标位置。然后使用XQueryTree()
获取一个窗口列表。 XQueryTree()
以正确的z顺序返回窗口列表,这样您就可以遍历所有窗口,直到找到一个边界框在指针下面的窗口,XGetWindowAttributes()
将为您提供找出所需的所有内容边界框。我不知道你会用塑造窗户做什么。
我几年没有使用X11,所以这可能是一个相当笨重的方法,但它应该工作。我也没有我的O'Reilly X11书籍了,如果你打算使用低级别的X11,那么你会想要把它放在书中。我认为这几天整个系列都是免费在线提供的。
答案 1 :(得分:3)
我没有编写X11超过十年,所以请原谅我,如果我错了。
我相信您可以在Windows上注册鼠标移动事件。如果通过将窗口句柄存储在某个变量或其他变量中来处理此类事件,然后处理事件以使其不会向下渗透树,那么在您想要识别窗口时,您只需查询变量即可。
然而,只有在鼠标位于已注册合适事件处理程序的窗口上时才会有效,因此您不会知道属于其他应用程序的窗口 - 除非有办法在其他人的窗口上注册事件这可能是可能的。
优于其他答案的优点是您不必遍历整棵树。缺点是你需要处理很多鼠标移动事件,它可能无法找到其他人的窗口。
我相信也可能有鼠标输入和鼠标离开事件,这会减少所需的处理量。