使用类或名称从xcb获取Window ID

时间:2016-05-14 21:45:31

标签: qt xcb

我想使用Qt的QWindow::fromWinID函数将小部件绘制到外部窗口上(希望这样可行)。

不幸的是,我需要绘制一个具有特定名称/类的窗口(我可以使用xwininfo和xprop来显示它)。我能找到的唯一代码就是在xwininfo和xprop的源代码中,但它似乎是一堆不必要的代码来做一件简单的事情:找到一个属性等于某个字符串的窗口,并返回它的窗口ID供Qt使用。不幸的是,我非常精通XCB,并且不知道如何开始。

如果没有200行代码,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

  

我能找到的唯一代码是xwininfo和xprop

的源代码

与xdotool一起,这真的是一个很好的资源。

  

找到具有某个属性等于某个字符串的窗口

是的,但没有X11内置功能可以做到这一点,这就是为什么这些工具会这样做的原因。然后有一些事情要考虑重新定位和非重新定位的窗口管理器,即是否需要进入客户端窗口等等。

我担心没有更简单的方法。低级X编程,无论是Xlib还是XCB,都会带来一些冗长。

您可以考虑的一件事是使用从xdotool中提取(并由libxdo提取的库,称为xdo_search_windows。它将在gcc -lxdo test.c中为您提供此功能。尽管如此,该库使用(并因此拉入)Xlib而不是XCB。

以下是您可以使用#include <xdo.h> int main() { xdo_t *xdo = xdo_new(NULL); xdo_enter_text_window(xdo, CURRENTWINDOW, "A", 0); return 0; } 编译的示例程序:

 Dictionary<string, int> d = new Dictionary<string, int>();
 d.Add("John", 2); 
 d.Add("Good", 3);
 d.Add("Person", 7);