ich möchte mich global über Mausbewegungen informieren lassen und wollte dazu das Xlib nutzen.
Zur Zeit sieht mein Code wie folgt aus:
Code: Alles auswählen
from Xlib.display import Display
from Xlib import X, XK
display = Display()
root = display.screen().root
root.grab_pointer(
True,
X.PointerMotionMask,
X.GrabModeAsync, X.GrabModeAsync,
X.NONE, X.NONE,
X.CurrentTime
)
#~ display.allow_events(X.GrabModeAsync, X.CurrentTime)
while 1:
event = root.display.next_event()
if event.type == X.MotionNotify:
print event.root_x, event.root_y
So wie ich die Dokumentation verstanden habe, müsste der Parameter "True" der Funktion grab_pointer() dafür sorgen, dass die Events trotz meines "Dazwischenfunkens" korrekt an die jeweiligen Client-Fenster durchgereicht werden. Werden sie aber nicht: Ich kann die Maus zwar noch bewegen, Mausklicks werden aber ignoriert. Ich kann das Programm nur noch über die Tastatur beenden (STRG+C).
Hat jemand von euch eine Idee, wo das Problem liegen könnte? Prinzipiell könnte ich die Mausposition ja auch wie folgt auslesen:
Code: Alles auswählen
while 1:
data = Display().screen().root.query_pointer()._data
print data["root_x"], data["root_y"]
time.sleep(0.001)
Danke schonmal für mögliche Hinweise.
Besten Gruß,
brb
//edit:
Ich habe eine Lösung gefunden: Nicht key_grab() oder pointer_grab() sind, was ich suche, sondern die Record-Extension des Xlibs. Beispiel findet sich hier