3

これらのイベントを実際のマウスにマップすることでマウスカーソルの動きとクリックを制御する方法について多くのチュートリアルを参照しましたが、このマウスを/ dev /input/内の指定された1つのイベントに関連付ける必要があることに気付きました。私は実際のマウスを1つ接続しませんでした。または、Linuxがこの実際のマウスで正しいイベント番号を提供しなかった場合、プログラムは間違いなく失敗します。

ここで、Linux上で1つの完全な仮想マウスを作成できる一般化されたプログラムを作成する必要があります。つまり、このプログラムは、マシンに実際に1つのマウスがなくても、どのマシンにも適用できますが、カーソルは私は彼らに距離、マウスカーソルの移動方向、クリックにかかる時間、そしてこのクリックが続く時間を与えます。

したがって、マップする必要のある実際のマウスデバイスを必要としない一般的なインターフェイスがあるのではないかと思います。/dev/input/miceイベントにアクセスしようとしましたが、カーソルの位置とクリック情報しか取得できないようです。それが動くかクリックする限り、誰かが私にもっと一般的なインターフェースを教えてもらえますか?よろしくお願いします!!!

4

2 に答える 2

3

XTest 関数を使用できます。この X11 拡張機能には、キーの押下、マウス ボタンの押下、およびマウスの動きを偽造する機能が含まれています。

ここでマニュアルページを読むことができます: http://linux.die.net/man/3/xtestfakekeyevent

-lX11この短い C の例は、および とリンクされている場合-lXtst、マウスを画面の左上隅に移動し、マウスの左ボタンをクリックする必要があります。

#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>

void move_mouse(Display* display, int x, int y){
    XTestFakeRelativeMotionEvent(display, x, y, 0);
    XFlush(display);
}
void set_mouse(Display* display, int x, int y){
    XTestFakeMotionEvent(display, 0, x, y, 0);
    XFlush(display);
}
void button_make(Display* display, unsigned int button){
    XTestFakeButtonEvent(display, button, True, 0);
    XFlush(display);
}
void button_break(Display* display, unsigned int button){
    XTestFakeButtonEvent(display, button, False, 0);
    XFlush(display);
}
int main(int argc, char **argv){
    Display *display = XOpenDisplay(NULL);
    set_mouse(display, 0, 0);
    button_make(display, 1);
    button_break(display, 1);
    return 0;
}
于 2013-01-20T23:43:16.120 に答える
0

この関連する質問を参照してください。

X11 デスクトップ環境を想定すると、使用できますXSendEvent。ただし、アプリケーションを受信すると、そのような「偽の」イベントを識別できます。

于 2013-01-20T20:01:42.580 に答える