【问题标题】:How do I get the window that currently has the cursor on top of it with X11?如何使用 X11 获取当前光标位于其顶部的窗口?
【发布时间】:2010-12-23 02:09:11
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: c++ c x11 xorg xserver


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2015-07-12
      相关资源
      最近更新 更多