1

現時点では、Python を使用してマウスの左ボタンが押されていることを検出し、このイベントを 1 回だけではなく迅速に送信しようとしています。私が基本的にやりたいことは、マウスの左ボタンを押したままにすると、クリックして離すまでもう一度クリックすることです。しかし、私は 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)

これは、指定されたキーコードで特別なイベントをキャッチするためのインポートのようです。しかし、最初に、マウスの左クリックにはどのようなキーコードがありますか? 第二に、それが押されていることを検出してから、マウスクリックイベントの送信を迅速に開始するにはどうすればよいですか。助けてくれて本当に感謝しています。(ホットキーでこのスクリプトを停止する方法もクールだろう...)

4

1 に答える 1

5

実際にはXlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask、ボタンの押下とリリース (キーの押下とリリースとは異なります) のイベントを取得する必要があります。イベントはButtonPressButtonReleaseで、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 に答える