2012-04-21 46 views
3

爲了教育目的,我開始着手編寫使用cwiidXlib的python腳本,以便我可以像使用鼠標一樣使用我的wiimote。如何在Python上用Xlib模擬鼠標點擊

到目前爲止,我已經通過調用disp.warp_pointer(dx,dy)移動光標,然後每隔一段時間調用disp.sync()。我擔心這可能不是最有效的方法,但至少目前來說,它很簡單並且運行良好。

問題我有更多的困難與鼠標點擊。我如何在Xlib中模擬鼠標點擊?我希望單獨的新聞和發佈活動,以便我可以拖放東西。我遇到過this的帖子,但所有的解決方案似乎都使​​用其他庫。

+0

關於您鏈接到的問題的[python -uinput suggestion](http://stackoverflow.com/a/3572488/709852)應該有效。據我瞭解,這實際上是在內核級別注入事件,因此無論您是使用XLib還是Tkinter或GTK或其他工具包都無關緊要。 – 2012-04-21 08:33:46

回答

3

在純Xlib(C語言)上,您可以使用XTestExtensionXSendEvent()。我不確定他們的python綁定。使用xpyb可能會綁定它們的xcb版本。

還有一個來自xautomation包(在Debian上,sudo apt-get install xautomation,然後man xte)的稱爲xte的二進制文件。 xte非常易於使用,您還可以查看其源代碼以瞭解如何使用XTestExtension

指針:

+2

進一步搜索後,它看起來像Python上的「Xlib.ext.xtest」可能等同於「XTestExtensions」。無論如何'xtest.fake_input'很好。 – math4tots 2012-04-21 18:50:28

+0

@ math4tots:感謝您的評論,我試圖完成相同的工作,但我找不到如何調用XTest *方法。問候, – Sebastian 2012-11-29 14:53:36

2

僅使用蟒的Xlib:

from Xlib import X 
from Xlib.display import Display 
from Xlib.ext.xtest import fake_input 
d = Display() 
fake_input(d, X.ButtonPress, 1) 
d.sync() 
fake_input(d, X.ButtonRelease, 1) 
d.sync() 

fake_input的第三個參數選擇正在模擬的鼠標按鈕。 1/2/3是左/中/右按鈕,4/5和6/7應該做垂直和水平滾輪。