Python Xlib捕获/发送鼠标单击

Python Xlib捕获/发送鼠标单击,python,events,mouse,click,xlib,Python,Events,Mouse,Click,Xlib,目前,我正在尝试使用Python检测鼠标左键何时被按住,然后开始快速发送此事件,而不是仅发送一次。我基本上想做的是,当鼠标左键被按住时,它会不断地点击,直到你放开它。但我对整个Xlib有点困惑,我认为它实际上非常令人困惑。任何关于如何做到这一点的帮助都将非常棒。这就是我到目前为止得到的: #!/usr/bin/env python import Xlib import Xlib.display def main(): display = Xlib.display.Display()

目前,我正在尝试使用Python检测鼠标左键何时被按住,然后开始快速发送此事件,而不是仅发送一次。我基本上想做的是,当鼠标左键被按住时,它会不断地点击,直到你放开它。但我对整个Xlib有点困惑,我认为它实际上非常令人困惑。任何关于如何做到这一点的帮助都将非常棒。这就是我到目前为止得到的:

#!/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()
但不幸的是,控制台中没有输出。在互联网上快速搜索后,我发现以下内容:

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

这似乎是为了用给定的键码捕捉特殊事件而导入的。但首先,鼠标左键点击有什么键码(如果有的话)?其次,我如何检测它何时被按下,然后开始快速发送mouseclick事件。我真的很感激你的帮助。(也许用热键停止此脚本的方法也会很酷…

实际上,您想要
Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask
,以获取按钮按下和释放的事件(不同于按键和释放)。事件是
ButtonPress
ButtonRelease
,而
detail
实例变量为您提供了按钮编号。从您获得按下事件到获得释放事件,您知道按钮被按下。当然,当按下某个键时,您也可以接收键事件并执行其他操作(例如退出脚本)

编辑:此版本适合我,例如…:

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()

实际上,您希望
Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask
,以获取按钮按下和释放的事件(不同于按键按下和释放)。事件是
ButtonPress
ButtonRelease
,而
detail
实例变量为您提供了按钮编号。从您获得按下事件到获得释放事件,您知道按钮被按下。当然,当按下某个键时,您也可以接收键事件并执行其他操作(例如退出脚本)

编辑:此版本适合我,例如…:

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()

那么,我该如何指定“root.grab_key”?只是尝试了几种组合,没有任何效果:(.你能帮我一个忙,尽快写下脚本或至少写下基础吗?否则我知道它会一直持续到最后运行,虽然它并不复杂。我会非常感激。请参阅我的答案编辑。因为你不想抓取密钥,当然不需要调用grab_密钥。顺便说一句,有关grab密钥的更多信息,请参阅(一般来说,您需要X11熟悉度和文档才能成功使用Python Xlib)。我使用了这段代码,得到::code=10,resource\u id=256,sequence\u number=9,major\u opcode=2,minor\u opcode=0怎么了?@linjun,不幸的是X11的文档不是最好的,所以(除了试图访问私有资源之外)很难知道发生了什么——特别是当你没有提供完整的回溯时,没有它调试任何Python问题都是件麻烦事!我知道这不适合评论——如果你想得到帮助,你需要打开一个新问题来复制和粘贴回溯。(只要你能做到这一点,像往常一样,向我们提供关于你的平台、Python版本等的完整、准确的细节也是一个很好的主意)。那么我该如何指定“root.grab_key”?只是尝试了几种组合,没有任何效果:(.你能帮我一个忙,尽快写下脚本或至少写下基础吗?否则我知道它会一直持续到最后运行,虽然它并不复杂。我会非常感激。请参阅我的答案编辑。因为你不想抓取密钥,当然不需要调用grab_密钥。顺便说一句,有关grab密钥的更多信息,请参阅(一般来说,您需要X11熟悉度和文档才能成功使用Python Xlib)。我使用了这段代码,得到::code=10,resource\u id=256,sequence\u number=9,major\u opcode=2,minor\u opcode=0怎么了?@linjun,不幸的是X11的文档不是最好的,所以(除了试图访问私有资源之外)很难知道发生了什么——特别是当你没有提供完整的回溯时,没有它调试任何Python问题都是件麻烦事!我知道这不适合评论——如果你想得到帮助,你需要打开一个新问题来复制和粘贴回溯。(只要你能做到这一点,像往常一样,给我们提供关于你的平台、Python版本等的完整、准确的细节也是一个很好的主意)。这里是一个演示点击、鼠标移动和按键的记录。这里是一个演示点击、鼠标移动和按键的记录。