2009-07-18 124 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