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)
看起来捕捉特定事件需要用到给定的键码。那么,左键点击的键码是什么呢?如果有的话?其次,我该如何检测到它被按住,然后开始快速发送鼠标点击事件呢?我会非常感激任何帮助。(也许有个热键可以停止这个脚本也不错……)
1 个回答
5
其实你需要的是 Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask
,这样才能获取到按钮按下和松开的事件(这和键盘按下和松开是不同的)。这些事件分别是 ButtonPress
和 ButtonRelease
,而 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()