目前我正在尝试使用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 :(得分: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()