2012-10-12 56 views
0

我需要一些幫助來隱藏和禁用鼠標指針。但我需要將所有鼠標事件發送到其他設備。 所以主要的場景是:打開SWT應用程序 - >按下按鈕(或標籤,或你想要什麼...) - >消失鼠標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); 

    } 

} 
+0

請詳細說明。很難說這裏到底在問什麼。 – Baz

+0

我的意思是我需要捕獲鼠標事件並將它們發送到其他設備 – user1417608

+0

從哪裏抓住它們並將它們發送到哪裏? – Baz

回答

0

您可以創建一個Shell是全屏,並設置它的alpha值設置爲0。然後,只需在Display中添加Listener並捕獲所有鼠標事件:

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 + 選項卡返回到上一個窗口。

+0

此代碼防止僅在SWT中捕獲。但是我需要一種「遙控風格」,你不能在當地做任何事情。像這樣:http://synergy-foss.org/ – user1417608

+0

@ user1417608這不能用Java來完成,因爲Java只能控制窗口內的東西。也許這是可能的與JNI。 – Baz

+0

我正在尋找解決方案,打開全屏透明窗口。如果我達到透明功能可能會起作用。 – user1417608