2012-04-21 33 views
3

教育的な目的のために、cwiidXlibを使用してPythonスクリプトを作成しましたので、wiimoteをマウスのように使用できます。Python上でXlibを使ってマウスのクリックをシミュレートする方法

これまではdisp.warp_pointer(dx,dy)を呼び出し、設定した時間間隔ごとにdisp.sync()を呼び出してカーソルを移動させました。私はそれがそれを行う最も効率的な方法ではないかもしれないが、少なくとも今のところ、それは単純で十分にうまくいくのではないかと恐れている。

私が難しい問題はマウスクリックです。 Xlibでマウスクリックをシミュレートするにはどうすればよいですか?別のプレスイベントとリリースイベントをドラッグ&ドロップできるようにしたいと思います。私はthisの投稿に出くわしましたが、すべてのソリューションは他のライブラリを使用しているようです。

+0

リンク先の質問の[python-uinput suggestion](http://stackoverflow.com/a/3572488/709852)が動作するはずです。私が理解しているように、それは実際にカーネルレベルでイベントを注入しているので、XLibかTkinterかGTKか他のツールキットを使っているかどうかは関係ありません。 –

答えて

3

プレーンXlib(C言語)では、XTestExtensionまたはXSendEvent()を使用できます。彼らのPythonバインディングについてはわかりません。おそらく、xpybを使ってxcbバージョンのバインディングがあります。

xautomationパッケージのxteというバイナリ(Debianではsudo apt-get install xautomation、次にman xte)もあります。 xteは非常に使いやすく、そのソースコードを見てXTestExtensionの使い方を学ぶこともできます。

ポインタ:

+2

さらに検索すると、Pythonの 'Xlib.ext.xtest'が' XTestExtensions'と同等であるようです。とにかく 'xtest.fake_input'はうまく動作します。 – math4tots

+0

@ math4tots:あなたのコメントありがとう、私は同じを達成しようとしていたが、私はXTest *メソッドを呼び出す方法を見つけることができませんでした。よろしく、 – Sebastian

2

のみの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() 

fake_inputの3番目のパラメータは、シミュレートされるマウスボタンを選択します。 1/2/3は左/中/右ボタン、4/5および6/7は縦横のスクロールを行います。

関連する問題