[英]How do I get the window that currently has the cursor on top of it with X11?
如何检索光标位于X11服务器顶部的顶部窗口?
窗口不必是“活动的”(选择,打开,无论如何),它只需要将光标悬浮在它上面。
提前致谢。
您可以使用XQueryPointer()
来获取鼠标位置。 然后使用XQueryTree()
获取一个窗口列表。 XQueryTree()
以正确的z顺序返回窗口列表,因此您可以遍历所有窗口,直到找到其边界框位于指针下的窗口, XGetWindowAttributes()
将为您提供找出边界框所需的一切。 我不知道你会用塑造窗户做什么。
我有几年没有使用X11,所以这可能是一个相当笨重的方法,但它应该工作。 我也没有我的O'Reilly X11书籍了,如果你打算使用低级别的X11,那么你会想要把它放在书中。 我认为这几天全系列免费在线提供。
我已经十多年没有对X11进行编程了,所以如果我弄错了,请原谅我。
我相信你可以在你的窗户上注册鼠标移动事件。 如果通过将窗口句柄存储在某个变量或其他变量中来处理此类事件,然后处理事件以使其不会向下渗透树,那么在您想要识别窗口时,您只需查询变量即可。
但是,只有在鼠标位于已注册合适事件处理程序的窗口上时,这才会起作用,因此您不会知道属于其他应用程序的窗口 - 除非有办法在其他人的窗口上注册事件,这可能是可能。
优于其他答案的优点是您不必遍历整个树。 缺点是你需要处理很多鼠标移动事件,它可能无法找到其他人的窗口。
我相信也可能有鼠标输入和鼠标离开事件,这将减少所需的处理量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.