2009-07-18 8 views
1

Im Moment versuche ich Python zu verwenden, um zu erkennen, wenn die linke Maustaste gehalten wird und dann zu beginnen, dieses Ereignis schnell zu senden, anstatt nur einmal. Was ich im Grunde tun möchte ist, dass wenn die linke Maustaste gedrückt wird, es klickt und klickt, bis Sie es loslassen. Aber ich bin ein bisschen verwirrt mit der ganzen Xlib, ich denke, es ist wirklich sehr verwirrend. Jede Hilfe, wie man das macht, wäre wirklich großartig. Das ist, was ich bis jetzt habe:Python Xlib fangen/senden Mausklick

#!/usr/bin/env python 

import Xlib 
import Xlib.display 

def main(): 
    display = Xlib.display.Display() 
    root = display.screen().root 
    while True: 
     event = root.display.next_event() 
     print event 

if __name__ == "__main__": 
    main() 

Aber es gibt leider keine Ausgabe in der Konsole. Nach einer schnellen Suche im Internet fand ich folgende:

root.change_attributes(event_mask=Xlib.X.KeyPressMask) 
root.grab_key(keycode, Xlib.X.AnyModifier, 1, Xlib.X.GrabModeAsync, 
       Xlib.X.GrabModeAsync) 

Diese scheinbar ist importieren ein besonderes Ereignis mit dem angegebenen keycode zu fangen. Aber erstens, welchen Keycode hat der linke Mausklick, wenn überhaupt? Und zweitens, wie kann ich erkennen, wenn es gedrückt wird und dann das Mausklick-Ereignis schnell senden. Ich wäre wirklich dankbar für Hilfe. (Vielleicht wäre ein Weg, um dieses Skript mit einem Hotkey zu stoppen wäre auch cool ...)

+0

Hier ist ein [offizielles Beispiel] (https://sourceforge.net/p/python-xlib/code/ HEAD/tree/trunk/examples/record_demo.py) demonstriert die Aufzeichnung von Klicks, Mausbewegungen und Tastendrücken. – opyate

Antwort

4

Eigentlich wollen Sie Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask, um Ereignisse für Tasten drücken und Freigaben (anders als Tasten drücken und Freigaben). Die Ereignisse sind ButtonPress und ButtonRelease, und die detail Instanzvariable gibt Ihnen die Schaltflächennummer. Von dem Zeitpunkt, an dem Sie das Presseereignis erhalten, bis zu dem Zeitpunkt, zu dem Sie das Freigabeereignis erhalten, wissen Sie, dass die Schaltfläche gedrückt gehalten wird. Natürlich können Sie auch Schlüsselereignisse empfangen und etwas anderes tun (z. B. das Skript beenden), wenn eine bestimmte Taste gedrückt wird.

bearbeiten: Diese Version funktioniert gut für mich, zum Beispiel ...:

import Xlib 
import Xlib.display 

def main(): 
    display = Xlib.display.Display(':0') 
    root = display.screen().root 
    root.change_attributes(event_mask= 
     Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask) 

    while True: 
     event = root.display.next_event() 
     print event 

if __name__ == "__main__": 
    main() 
+0

Wie also würde ich "root.grab_key" angeben? – cryzed

+0

Habe einfach mehrere Kombinationen ausprobiert, nichts hat funktioniert :(. Könntest du mir einen Gefallen tun und schnell das Skript schreiben oder zumindest die Basis? Sonst weiß ich, dass es ewig dauern würde bis ich es endlich fertig bekomme obwohl es nicht so kompliziert ist. Ich würde wirklich dankbar sein. – cryzed

+0

Siehe die Antwort meiner Antwort. Da Sie nicht einen Schlüssel greifen wollen, gibt es natürlich keine Notwendigkeit, grab_key aufzurufen. BTW, für mehr auf Grab-Key siehe http://tronche.com/gui /x/xlib/input/XGrabKey.html (im Allgemeinen benötigen Sie X11 Vertrautheit und Dokumente, um Python Xlib erfolgreich zu verwenden) –