7

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

窗口不必是“活动的”(选中、打开等等),它只需要让光标悬浮在它上面。

提前致谢。

4

2 回答 2

6

您可以使用XQueryPointer()来获取鼠标位置。然后使用XQueryTree(). XQueryTree()以正确的 z 顺序返回窗口列表,这样您就可以遍历所有窗口,直到找到一个其边界框位于指针下方的窗口,这XGetWindowAttributes()将为您提供找出边界框所需的一切。不过,我不确定你会用异形窗户做什么。

我已经有几年没有使用 X11 了,所以这可能是一种相当笨拙的方法,但它应该可以工作。我也没有我的 O'Reilly X11 书籍了,如果你要使用低级别的 X11 东西,你会想要获得该系列的第一本书;我认为现在整个系列都可以在网上免费获得。

于 2010-12-23T05:40:49.597 回答
3

我已经十多年没有对 X11 进行编程了,如果我弄错了,请原谅我。

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

但是,这仅在鼠标悬停在您为其注册了合适的事件处理程序的窗口上时才有效,因此您不会知道属于其他应用程序的窗口 - 除非有一种方法可以在其他人的窗口上注册事件,这可能是可能的。

与其他答案相比的优势是您不必遍历整个树。缺点是你需要处理大量的鼠标移动事件,而且可能无法找到其他人的窗口。

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

于 2010-12-23T13:22:22.380 回答