Java Robot class simulating human mouse movement

后端 未结 3 893
离开以前
离开以前 2021-02-08 17:58

I am working on a project about remote control, send conrdinate x and y of cursor from client to server.

But

robot.mouseMove(x,y);

wi

3条回答
  •  误落风尘
    2021-02-08 18:42

    Take a look in this example that I wrote. You can improve this to simulate what Joey said. I wrote it very fast and there are lots of things that can be improved (algorithm and class design). Note that I only deal with left to right movements.

    import java.awt.AWTException;
    import java.awt.MouseInfo;
    import java.awt.Point;
    import java.awt.Robot;
    
    public class MouseMoving {
    
        public static void main(String[] args) {
            new MouseMoving().execute();
        }
    
        public void execute() {
            new Thread( new MouseMoveThread( 100, 50, 50, 10 ) ).start();
        }
    
        private class MouseMoveThread implements Runnable {
    
            private Robot robot;
            private int startX;
            private int startY;
            private int currentX;
            private int currentY;
            private int xAmount;
            private int yAmount;
            private int xAmountPerIteration;
            private int yAmountPerIteration;
            private int numberOfIterations;
            private long timeToSleep;
    
            public MouseMoveThread( int xAmount, int yAmount,
                    int numberOfIterations, long timeToSleep ) {
    
                this.xAmount = xAmount;
                this.yAmount = yAmount;
                this.numberOfIterations = numberOfIterations;
                this.timeToSleep = timeToSleep;
    
                try {
    
                    robot = new Robot();
    
                    Point startLocation = MouseInfo.getPointerInfo().getLocation();
                    startX = startLocation.x;
                    startY = startLocation.y;
    
                } catch ( AWTException exc ) {
                    exc.printStackTrace();
                }
    
            }
    
            @Override
            public void run() {
    
                currentX = startX;
                currentY = startY;
    
                xAmountPerIteration = xAmount / numberOfIterations;
                yAmountPerIteration = yAmount / numberOfIterations;
    
                while ( currentX < startX + xAmount &&
                        currentY < startY + yAmount ) {
    
                    currentX += xAmountPerIteration;
                    currentY += yAmountPerIteration;
    
                    robot.mouseMove( currentX, currentY );
    
                    try {
                        Thread.sleep( timeToSleep );
                    } catch ( InterruptedException exc ) {
                        exc.printStackTrace();
                    }
    
                }
    
            }
    
        }
    
    }
    

提交回复
热议问题