2009-07-18 119 views
1

目前我正尝试使用Python来检测鼠标左键何时被占用,然后开始快速发送此事件而不是一次。我基本上想要做的是,当鼠标左键被按住时,它会再次点击并再次点击,直到你放开它。但是我对整个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) 

这看起来是导入的,可以用给定的键码捕捉特殊事件。但首先,左键点击有什么键码,如果有的话?其次,我怎样才能检测到它何时被按下,然后开始快速发送鼠标点击事件。我会非常感激的帮助。 (也许一个用热键来停止脚本的方法会很酷......)

+0

这里有一个[官方示例](https://sourceforge.net/p/python-xlib/code/ HEAD/tree/trunk/examples/record_demo.py),演示点击,鼠标移动和按键的记录。 – opyate 2016-04-01 11:47:00

回答

4

其实你想要Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask,以获得按钮按下和释放的事件(与按键和释放不同)。事件是ButtonPressButtonRelease,并且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() 
+0

那么我怎么去指定“root.grab_key”呢? – cryzed 2009-07-18 21:54:25