Ich möchte die QWindow::fromWinID
Funktion von Qt verwenden, um Widgets in ein externes Fenster zu zeichnen (hoffentlich funktioniert dies).
Leider muss ich auf ein Fenster zeichnen, das einen bestimmten Namen / eine bestimmte Klasse hat (ich kann es mit xwininfo und xprop anzeigen). Der einzige Code, den ich dazu finden kann, befindet sich in der Quelle von xwininfo und xprop, aber es scheint eine Menge unnötigen Codes zu sein, um eine einfache Sache zu tun: Suchen Sie das Fenster mit einer bestimmten Eigenschaft, die einer Zeichenfolge entspricht, und geben Sie die Fenster-ID zurück für Qt zu verwenden. Leider kenne ich mich mit XCB sehr schlecht aus und würde nicht wissen, wie ich anfangen soll.
Wie kann ich das ohne 200 Codezeilen machen?
Der einzige Code, den ich dazu finden kann, befindet sich in der Quelle von xwininfo und xprop
Was neben xdotool wirklich eine großartige Ressource ist.
Suchen Sie das Fenster mit einer bestimmten Eigenschaft, die einer Zeichenfolge entspricht
Ja, aber es gibt kein eingebautes X11, das dies tut, weshalb diese Tools diesen Weg gehen. Dann gibt es Dinge zu beachten, wie das Reparieren und Nicht-Reparieren von Fenstermanagern, dh ob Sie in das Client-Fenster absteigen müssen oder nicht und so weiter.
Ich fürchte, es gibt keinen 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 (und von) verwendet wird xdotool
und aufgerufen wird libxdo
. Es würde diese Funktionalität für Sie in anbieten xdo_search_windows
. Die Bibliothek verwendet jedoch Xlib anstelle von XCB (und zieht es daher ein).
Hier ist ein Beispielprogramm, mit dem Sie kompilieren können 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;
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen