2016-11-29 24 views
-1

我正尝试在Java中创建远程桌面访问工具(实际上比任何其他实验都多),但我在转换点击到的点时遇到了问题在主屏幕上的位置。让我解释。在较大的显示器上将720p屏幕转换为相对点

Here's an example of how it looks

下面是一个例子工具看起来像(现在)如何。 屏幕捕获窗口是1280x720,实际屏幕大小不同,我如何获得鼠标所在的位置并将其更改为主屏幕上的相同位置?

例如如果我点击屏幕截图窗口上的苹果标志,它应该移动我的鼠标并点击主屏幕上的苹果标志。我只是无法弄清楚如何在窗口中获得点,并将其翻译到主屏幕上的相同点上!

编辑:这就是我想要做的ATM:

MouseAdapter adapter = new MouseAdapter() { 
     @Override 
     public void mouseMoved(MouseEvent e) { 
      PacketMoveMouse packetMoveMouse = new PacketMoveMouse(address, e.getXOnScreen(), e.getYOnScreen()); 
      sendPacket(address, packetMoveMouse); 
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      Point point = this.getPoint(e.getPoint()); 
      PacketClickMouse packetClickMouse = new PacketClickMouse(address, point.getX(), point.getY(), e.getButton()); 
      sendPacket(address, packetClickMouse); 
     } 

     private Point getPoint(Point point) { 
      SwingUtilities.convertPointFromScreen(point, panel); 
      return point; 
     } 
    }; 

我也试过不转换点,我只是想各种各样的事情。它正确地移动鼠标,但错误的一点。

我也试图将其转换为使用一些基本的数学在主屏幕上的一个点,但我认为我的逻辑缺陷,这里是我的尝试:

  Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
      int x = ((PacketMoveMouse) packet).getX(); 
      int y = ((PacketMoveMouse) packet).getY(); 
      double xRatio = (screenRect.getWidth()/1280); 
      double yRatio = (screenRect.getHeight()/720); 

      Robot robot = new Robot(); 
      robot.mouseMove((int) ((x * xRatio)), (int) ((y * yRatio))); 

这是我刚刚发送的常规指向客户端,然后在接收到后转到相对点。客户端的显示屏幕目前为1280x720。

+0

为了更好地帮助更快,发布[MCVE]或[短的,独立的,正确的示例](http://www.sscce.org/)。 –

+0

*“我只是无法弄清楚如何在窗口中获得点”*你是说这是**你无法弄清楚的一部分**,或者它只是在那里导致你是**实际上遇到了麻烦? ..没关系,MCVE应该清除它。 –

+0

@AndrewThompson我用我试过的一些代码更新了这篇文章。谢谢 – Erouax

回答

0

为了让您的鼠标当前坐标

int mouseX; 
int mouseY; 

@Override 
public void mouseMoved(MouseEvent e) { 
    mouseX = e.getX(); 
    mouseY = e.getY(); 

} 
+0

我知道如何获得这一点,但我试图将它转换为主屏幕上的一个点(从1280x720到客户端屏幕的任何分辨率)。 – Erouax

相关问题