0

マウスポインタを非表示にして無効にするためのヘルプが必要です。ただし、すべてのマウスイベントを他のデバイスに送信する必要があります。したがって、主なシナリオは次のとおりです。SWTアプリケーションを開く->ボタン(またはラベル、または必要なもの...)を押す->マウスSWT側が消える、ポインタなし、イベントなし->マウスポインタが他のデバイスに表示される- >他のデバイスのマウスポインタをメインの物理的なマウスから制御できます。

今までに見つけたのは、ポインタを透明にする方法で、20msごとに位置を固定できるタイマーを考えました。しかし、どうすればイベントを防ぐことができますか?そして、私はまだそれらを捕まえることができますか?

よろしく

アップデート:

最終的な解決策:新しいフルスクリーンウィンドウが半透明

public class AntiMouseGui {

    Display display;
    Shell shell;

    final int time = 20;

    private Runnable timer = null;

    public AntiMouseGui(final Display display, final DebugForm df, final PrintWriter socketOut) {

        Image bg = new Image(display, "icons/hide_mouse_wallpapaer.png");

        shell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);

        final int dis_x = display.getClientArea().width, dis_y = display.getClientArea().height;
        shell.setSize(dis_x, dis_y);

        shell.setBackgroundImage(bg);
        shell.setAlpha(50);
        shell.setMinimumSize(shell.getSize()); 
        shell.open();


        timer = new Runnable() {
            public void run() {
                Point cur_loc = display.getCursorLocation();
                int span_x = dis_x / 2 - cur_loc.x, span_y = dis_y / 2 - cur_loc.y;

                df.appendTxt("span x = " + span_x + " span y = " + span_y);
                if (span_x != 0) Controller.moveMouseRight(socketOut, -span_x);
                if (span_y != 0) Controller.moveMouseDown(socketOut, -span_y);

                display.setCursorLocation(new Point(dis_x / 2, dis_y / 2));
                if (!shell.isDisposed()) display.timerExec(time, this);
            }
        };
        display.timerExec(time, timer);

    }

}
4

1 に答える 1

0

フルスクリーンのを作成し、Shellそのアルファ値を0に設定できます。次に、にを追加しListenerて、Displayすべてのマウスイベントをキャッチします。

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    shell.setFullScreen(true);
    shell.setAlpha(0);

    final Listener sendSomewhere = new Listener() {

        @Override
        public void handleEvent(Event event) {
            int x = event.x;
            int y = event.y;

            int eventType = event.type;

            System.out.println(x + " " + y + ": " + eventType);

            // send the coordinates to your other device
        }
    };

    int[] events = new int[] {SWT.MouseDown, SWT.MouseUp, SWT.MouseDoubleClick, SWT.Selection};

    for(int event : events)
    {
        display.addFilter(event, sendSomewhere);
    }


    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

Alt+を使用Tabして、前のウィンドウに戻ります。

于 2012-10-12T14:20:29.480 に答える