How do I simulate mouse clicks with Xlib on Python

时光毁灭记忆、已成空白 提交于 2021-02-06 13:47:23

问题


For educational purposes I've set out to write a python script using cwiid and Xlib so that I can use my wiimote like a mouse.

So far I've gotten the cursor to move by calling disp.warp_pointer(dx,dy) then calling disp.sync() every set time interval. I'm afraid that it might not be the most efficient way to do it but at least for now, it's simple and works well enough.

The problem I'm having more difficulty with is mouse clicks. How do I simulate a mouse click in Xlib? I would like separate press and release events so that I can drag and drop stuff. I've come across this post, but all of the solutions there seem to use other libraries.


回答1:


On plain Xlib (C language), you can use the XTestExtension or XSendEvent(). I'm not sure about their python bindings. There are probably bindings for their xcb versions using xpyb.

There's also a binary called xte from the xautomation package (on Debian, sudo apt-get install xautomation and then man xte). xte is very easy to use, and you can also look at its source code to learn how to use the XTestExtension.

Pointers:

  • http://cgit.freedesktop.org/xorg/lib/libXtst/
  • http://cgit.freedesktop.org/xcb/xpyb/
  • http://hoopajoo.net/projects/xautomation.html
  • http://linux.die.net/man/1/xte



回答2:


using only python 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()

The third parameter to fake_input selects the mouse button being simulated. 1/2/3 being left/middle/right buttons, 4/5 and 6/7 should do vertical and horizontal wheel scrolls.



来源:https://stackoverflow.com/questions/10257019/how-do-i-simulate-mouse-clicks-with-xlib-on-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!