Python Xlib捕获/发送鼠标点击

时间:2009-07-18 14:19:33

标签: python events mouse click xlib

目前我正在尝试使用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)

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

1 个答案:

答案 0 :(得分:5)

实际上,您需要Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask来获取按钮按下和释放的事件(与按键和释放不同)。事件为ButtonPressButtonReleasedetail实例变量为您提供按钮编号。从您收到新闻发布活动到收到发布活动时,您知道按钮被按下。当然,当按下某个键时,您也可以 接收键事件并执行其他操作(例如退出脚本)。

修改:这个版本适用于我,例如......:

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()
相关问题