2016-05-14 19 views
0

Ich möchte Qt QWindow::fromWinID Funktion verwenden, um Widgets auf ein externes Fenster (hoffentlich wird dies funktionieren) zu zeichnen.Get Window ID von Xcb mit einer Klasse oder Name

Leider muss ich auf ein Fenster zeichnen, das einen bestimmten Namen/Klasse hat (ich kann es mit xwininfo und xprop zeigen). Der einzige Code, den ich finden kann, ist innerhalb der Quelle von xwininfo und xprop, aber es scheint wie ein Haufen unnötigen Codes, um eine einfache Sache zu tun: finde das Fenster mit einer bestimmten Eigenschaft gleich einer Zeichenfolge und gebe seine Fenster-ID zurück für Qt zu verwenden. Leider bin ich sehr versiert in XCB und würde nicht wissen, wie ich anfangen soll.

Wie kann ich dies ohne 200 Zeilen Code tun?

Antwort

1

Der einzige Code, den ich finden kann, dies zu tun, ist in der Quelle xwininfo und xprop

Welche wirklich eine großartige Ressource ist, neben mit xdotool.

finden das Fenster mit einer bestimmten Eigenschaft gleich einem String

Ja, aber es gibt keine X11 eingebaute, dass dies der Fall ist, weshalb diese Werkzeuge diesen Weg zu gehen. Dann gibt es Dinge, die man betrachten sollte, wie zum Beispiel Fensteranpassungen und nicht reparierende Window-Manager, d. H., Ob Sie in das Client-Fenster absteigen müssen oder nicht.

Ich fürchte, es gibt keinen viel einfacheren Weg. Low-Level-X-Programmierung, ob mit Xlib oder XCB, bringt nur etwas Ausführlichkeit.

Eine Sache, die Sie in Betracht ziehen könnten, ist die Verwendung der Bibliothek, die aus xdotool, genannt libxdo, extrahiert (und verwendet) wurde. Es würde diese Funktionalität für Sie in xdo_search_windows anbieten. Die Bibliothek verwendet (und zieht daher) Xlib und nicht XCB ein.

Hier ist ein Beispielprogramm Sie mit gcc -lxdo test.c zusammenstellen können:

#include <xdo.h> 

int main() { 
    xdo_t *xdo = xdo_new(NULL); 
    xdo_enter_text_window(xdo, CURRENTWINDOW, "A", 0); 
    return 0; 
} 
+0

Danke für den Tipp auf libxdo. Es scheint jedoch, ich kann mich nicht damit verbinden (oder zumindest die Symbole "nm" sagt mir, dass es definiert undefiniert bleibt, nachdem ich mich damit verbunden habe ... Ich habe '/ usr/lib/libxdo.so' auf meinem System (und der Linker kann die Datei finden), aber ich bekomme immer noch eine undefinierte Referenz. Eine Idee, warum das sein könnte? – rubenvb

+0

@rubenvb Ich habe meine Antwort mit einem Beispielprogramm bearbeitet und kompilieren Anweisungen. Das funktioniert für mich. –

+1

Es scheint Ich muss extern "C" über das xdo.h include hinzufügen oder ich bekomme ungelöste Symbole. Danke für die Hilfe! – rubenvb