0

我想使用 Qt 的QWindow::fromWinID功能将小部件绘制到外部窗口上(希望这会起作用)。

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

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

4

1 回答 1

1

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

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

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

是的,但是没有内置的 X11 可以做到这一点,这就是这些工具采用这种方式的原因。然后有一些事情需要考虑,例如重新父级和非重新父级窗口管理器,即您是否需要进入客户端窗口等等。

恐怕没有更简单的方法了。低级 X 编程,无论是使用 Xlib 还是 XCB,都会带来一些冗长。

您可以考虑的一件事是使用从(并由)提取的库xdotool,称为libxdo. 它会在xdo_search_windows. 不过,该库使用(并因此引入)Xlib 而不是 XCB。

这是一个可以编译的示例程序gcc -lxdo test.c

#include <xdo.h>

int main() {
    xdo_t *xdo = xdo_new(NULL);
    xdo_enter_text_window(xdo, CURRENTWINDOW, "A", 0);
    return 0;
}
于 2016-05-15T17:31:28.027 回答