2012-01-07 15 views
7

すべて、Xlib/Cでマウスクリックをシミュレートするにはどうすればよいですか?

私はこの質問がそのまま答えにくいとは思えません。私は過去2時間にグーグルで行ってきて、何かを見つけることができません。私がしたいのは、マウスの左ボタンをクリックしてC/Xorgコードを入力するだけです。私は1行のコードを期待していますが、C言語で書かれた唯一のものは約20行あり、とにかく動作しません。(WindowsではできますがLinux 。

質問の理由は、キーボードを使用して複数の画面にマウスポインタを移動させるユーティリティを書いたことです。唯一の問題は、ウィンドウabcが別のウィンドウxyzがその同じ場所の上にロードされていて、マウスポインタがxyzに動くだけですが、xyzにはフォーカスがありません - マウスをクリックしたままになります。コード

私が試したコードはXSendEvent()に基づいていました。

+0

**理由**を含めて**これを実行します。 –

+0

マウスの手の届かないところにいる場合は、この種のものをサポートするウィンドウマネージャを使用することを検討する必要があります。私はxmonadをお勧めできますが、他にもあります。 –

答えて

2

偽のクリックイベントを作成しようとするのではなく、直接ウィンドウを上げたりフォーカスしたりするのはなぜですか?これは、より信頼性が高く、すべてのウィンドウマネージャー(クリックしないようにフォーカスを合わせたウィンドウマネージャー)で作業する必要があります。

+0

R:スクリーンw.oの間を移動できるようにするための運動の全ポイント。マウスに触れなければならないので、もし私がKBを介してポインタを動かすことができますが、マウスを左クリックする必要があるならば、全体が少し無意味になります。もちろん、同じ画面上のウィンドウ間を移動するときに問題はありませんが、ある画面から別の画面に移動しようとすると、私が見つけることができるショートカットは組み込まれていません。 –

+0

マウスポインタを移動しながら移動させますが、クリックするのではなく上げ/フォーカスを送信します。 –

+0

良いアイデア!それはAlt + Escがそれを行うようです。今私はちょうどそれを送る方法を見つける必要があります。 –

2

はい、多かれ少なかれわかりました。

{ 
#include <X11/extensions/XTest.h> 
XTestFakeButtonEvent(display, 1, True, CurrentTime); 
XTestFakeButtonEvent(display, 1, False, CurrentTime); 
XFlush(display); 
} 

...とMakefileのLDFLAGSラインに「-lXtst」を追加します。とにかく、道であると思われます。

Xlibはとても難しいようです。私は他の図書館を使うための助言を受けていましたが、私はどのように切り換えようとしていたのでしょうか?

ありがとうございます。

2

xdotoolはこれを行う簡単な方法です。これはコマンドラインツールです。あなたは簡単なスクリプトでそれを使うことができます。例:

#!/bin/sh 
xdotool mousemove x y 
xdotool click 1 
+0

ありがとう、それは興味深いプログラムです、それは私の 'movemouse'よりもよく見えます、私の鉱山はおそらくロックボトムの簡単なマウスの動きの方が良いでしょう。 –

関連する問題