将720p屏幕转换为较大显示屏上的相对点

时间:2016-11-29 14:47:25

标签: java swing mouselistener

我试图用Java创建一个远程桌面访问工具(更多的是一个实验而不是真正的实验),但是我无法将点击的点转换为主屏幕上的某个位置。让我解释一下。

Here's an example of how it looks

以下是该工具的外观示例(暂时)。 屏幕捕获窗口为1280x720,实际屏幕大小不一,如何获取鼠标所在的位置并将其更改为主屏幕上的相同位置?

e.g。如果我点击屏幕捕获窗口上的苹果徽标,它应该移动鼠标并单击主屏幕上的苹果徽标。我只是无法弄清楚如何在窗口中获取该点,并将其转换为主屏幕上的相同点!

编辑:以下是我试图做的事情:

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。

1 个答案:

答案 0 :(得分:0)

获取鼠标CURRENT坐标

 int mouseX;
 int mouseY;

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

}