python-Xlib

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo, Ich wollte einfach mal fragen ob es einen ähnlichen Ansatz wie py4win auch für
Linux-Systeme gibt. Obwohl das sicherlich schwer ist, weil jeder eine anderen Desktop-Environment benutzt (GNOME, KDE, Xfce..).

Aber kennt eventuell jemand trotzdem etwas?
Zuletzt geändert von Crazed am Sonntag 31. August 2008, 10:05, insgesamt 1-mal geändert.
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo, Habe jetzt was gefunden: python-xlib.

Leider kommt mir nur die API etwas sehr... merkwürdig? vor...
Hat jemand eventuell ein Tutorial das nicht von python-xlib oder Xlib selber kommt, sondern von jemanden der damit selber Erfahrungen gemacht hat?

Z.b folgendes habe ich schon im internet gefunden:

Code: Alles auswählen

    display = Xlib.display.Display()
    def mouse_click(button):
        Xlib.ext.xtest.fake_input(display, Xlib.X.ButtonPress, button)
        display.sync()
        Xlib.ext.xtest.fake_input(display, Xlib.X.ButtonRelease, button)
        display.sync()
Aber jetzt kommen wieder fragen auf in der Dokumentation steht das man eigentlich auch Xlib.X.PointerWindow benutzen könnte, geht aber nicht.

Die API ergibt für mich irgendwie nicht viel Sinn..

Kann mir jemand helfen?

Angenommen ich wollte z.b das Aktuelle Fenster von oben links nach unten rechts nach einem bestimmten Pixel durchsuchen, wie soll man das bitte anstellen?!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Crazed hat geschrieben:Ich wollte einfach mal fragen ob es einen ähnlichen Ansatz wie py4win auch für
Linux-Systeme gibt.
Wozu ist py4win gut? Und du weißt schon, dass du mit der Xlib auf der untersten Ebene bist, beim X-Protokoll, das ausreichend haarig ist, dass recht schnell Leute Toolkits geschriebn haben, um s nicht nutzen zu müssen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

"Xlib auf der untersten Ebene bist, beim X-Protokoll, das ausreichend haarig ist, dass recht schnell Leute Toolkits geschriebn haben, um s nicht nutzen zu müssen?"

Bitte gib mir ein paar Beispiele!

py4win erlaubt dir unter Windows systemen mehr oder weniger sytemnahe Operationen komfortable auszuführen. Z.b Den Titel eines Fenster herausbekommen, Die Zwischenablage verändern, Tastaturanschläge und Mausclicks emulieren, Den Bildschirm nach einem Pixel absuchen.. etc. etc.

Ich suche sowas Ähnliches.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Crazed hat geschrieben:"Xlib auf der untersten Ebene bist, beim X-Protokoll, das ausreichend haarig ist, dass recht schnell Leute Toolkits geschriebn haben, um s nicht nutzen zu müssen?"

Bitte gib mir ein paar Beispiele!
Motif (& OpenMotif, Lesstif), Qt, GTK+, FLTK, Tk, Fox, Xaw, Xt.
Crazed hat geschrieben:py4win erlaubt dir unter Windows systemen mehr oder weniger sytemnahe Operationen komfortable auszuführen. Z.b Den Titel eines Fenster herausbekommen, Die Zwischenablage verändern, Tastaturanschläge und Mausclicks emulieren, Den Bildschirm nach einem Pixel absuchen.. etc. etc.
Link?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Tut mir Leid ich meinte natürlich pywin32 :oops: .
Und mit dem GTK und Qt Bindings kann ich das jetzt auf jeder beliebigen Desktop Umgebung machen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Crazed hat geschrieben:Und mit dem GTK und Qt Bindings kann ich das jetzt auf jeder beliebigen Desktop Umgebung machen?
Das schon, ist nur die Frage ob sie so eine Funktionalität auch bieten. Da bin ich mir nicht sicher.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Hallo,

ich hab mich für gestikk etwas näher mit python-xlib befasst. Wie Leonidas schon sagte ist die Arbeit mit der Xlib oft recht haarig, vor allem auch, weil die Dokumentation der python-xlib selber nicht wirklich das Wahre ist. Aber es kann auch helfen, die Original-Xlib-Dokumentation und den python-xlib-Code zu lesen.

Betreffend Window Manager: Sehr viele populäre Windowmanager erfüllen den NETWM-Standard. Ich hab da mal ein Modul geschrieben, das einige der in der Spezifikation aufgeführten Befehle / Abfragen vereinfacht: Hier hab ich mal ein hg-Repository aufgesetzt.
Crazed hat geschrieben:Angenommen ich wollte z.b das Aktuelle Fenster von oben links nach unten rechts nach einem bestimmten Pixel durchsuchen, wie soll man das bitte anstellen?!
Ich verstehe da jetzt leider überhaupt nicht was du willst ;) Könntest du das nochmal näher erläutern?

Gruß Fred
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Also, Z.b wenn ich folgendes machen will:

Ich habe ein Fenster fokusiert. Ich möchte jetzt alle Pixel innerhalb dieses Fenster scannen. Das heißt Pixel an (0/0), (1/0), (2/0), (3/0), (4/0),.... (X/Y) scannen, die RGB Werte bekommen und daraus ggf. noch einen HEX-Wert erstellen. Falls z.b die Farbe x des Pixels y an Koordinate z innerhalb des Fenster a mit einem bestimmten Wert übereinstimmt soll irgendetwas passieren.
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Hallo,

das ist mit der Xlib möglich. Window.get_image (in der Doku zwar als not implemented aufgeführt, aber trotzdem implementiert :D) gibt unter anderem ein `data` zurück, das ist allerdings noch nicht so einfach benutzbar. ltool hat jedoch unter anderem eine Funktion (getPILImage hier), die die von dort zurückgelieferten Daten zu einem PIL-Image konvertiert, welches du dann verarbeiten können solltest. Um das aktuelle Fenster zu erhalten, könntest du den entsprechenden Code aus pywmctrl benutzen.

Z.B. miit gdk solltest du aber auch an das Ziel kommen können.

Gruß Fred

Edit: Extra für dich, weil ich es ausprobieren wollte :D
Antworten