我正尝试在Java中创建远程桌面访问工具(实际上比任何其他实验都多),但我在转换点击到的点时遇到了问题在主屏幕上的位置。让我解释。在较大的显示器上将720p屏幕转换为相对点
下面是一个例子工具看起来像(现在)如何。 屏幕捕获窗口是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。
为了更好地帮助更快,发布[MCVE]或[短的,独立的,正确的示例](http://www.sscce.org/)。 –
*“我只是无法弄清楚如何在窗口中获得点”*你是说这是**你无法弄清楚的一部分**,或者它只是在那里导致你是**实际上遇到了麻烦? ..没关系,MCVE应该清除它。 –
@AndrewThompson我用我试过的一些代码更新了这篇文章。谢谢 – Erouax