2016-05-14 36 views
0

我想使用Qt的QWindow::fromWinID函數將小部件繪製到外部窗口上(希望這會起作用)。使用類或名稱從xcb獲取窗口ID

不幸的是,我需要繪製一個具有特定名稱/類的窗口(我可以使用xwininfo和xprop顯示它)。我能找到的唯一代碼是在xwininfo和xprop的源代碼中,但它看起來像是一堆不必要的代碼來做一件簡單的事情:找到具有與某個字符串相同的某個屬性的窗口,並返回其窗口ID供Qt使用。不幸的是,我對XCB非常不熟悉,並且不知道如何開始。

如何在沒有200行代碼的情況下執行此操作?

回答

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; 
} 
+0

感謝您的libxdo尖端。看起來雖然,我不能鏈接它(或者至少符號'納米'告訴我它定義保持未定義後,我與它鏈接......我有'/ usr/lib/libxdo.so'在我的系統上(並且鏈接器可以找到這個文件),但是我仍然得到一個未定義的引用。ANy idea why this might be? – rubenvb

+0

@rubenvb我編輯了我的答案並附帶了一個示例程序並編譯了指令,這對我很有用 –

+1

看來我需要將extern「C」添加到xdo.h包含或我得到未解決的符號。感謝您的幫助! – rubenvb