2012-04-21 45 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应该做垂直和水平滚轮。