1

目前,我正在尝试使用 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)

这似乎很重要,可以使用给定的键码捕获特殊事件。但首先,鼠标左键单击有什么键码(如果有的话)?其次,我如何检测它何时被按住,然后开始快速发送 mouseclick 事件。我将非常感谢您的帮助。(也许用热键停止这个脚本的方法也很酷......)

4

1 回答 1

5

实际上Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask,您想要获取按钮按下和释放的事件(与按键和释放不同)。事件是ButtonPressand 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()
于 2009-07-18T15:57:55.627 回答