我正嘗試在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