79 lines
2.6 KiB
Java
79 lines
2.6 KiB
Java
package main;
|
||
|
||
import java.awt.*;
|
||
import java.awt.event.InputEvent;
|
||
import java.awt.event.KeyEvent;
|
||
import java.awt.image.BufferedImage;
|
||
|
||
/**
|
||
* Работа с классом Robot.
|
||
* @author aNNiMON
|
||
*/
|
||
public class RobotUtils {
|
||
|
||
private static final int CLICK_DELAY = 300;
|
||
private Robot robot;
|
||
|
||
/**
|
||
* Конструктор
|
||
* @throws AWTException ошибка инициализации Robot
|
||
*/
|
||
public RobotUtils() throws AWTException {
|
||
robot = new Robot();
|
||
}
|
||
|
||
/**
|
||
* Кликнуть в нужную точку
|
||
* @param click точка по которой нужно кликнуть
|
||
*/
|
||
public void clickPoint(Point click) {
|
||
robot.mouseMove(click.x, click.y);
|
||
robot.mousePress(InputEvent.BUTTON1_MASK);
|
||
robot.delay(CLICK_DELAY);
|
||
robot.mouseRelease(InputEvent.BUTTON1_MASK);
|
||
}
|
||
|
||
/**
|
||
* Автоматически воспроизвести заданную последовательность нажатий
|
||
* @param buttons координаты точек, куда следует нажимать
|
||
* @param result последовательность id для указания на нужную кнопку
|
||
*/
|
||
public void autoClick(Point[] buttons, byte[] result) {
|
||
for (int i = 0; i < result.length; i++) {
|
||
clickPoint(buttons[result[i]]);
|
||
}
|
||
}
|
||
/**
|
||
* Автоматическое написание сообщения
|
||
* @param text "печатаемый" текст
|
||
*/
|
||
public void writeMessage(String text) {
|
||
for (char symbol : text.toCharArray()) {
|
||
boolean needShiftPress = Character.isUpperCase(symbol) && Character.isLetter(symbol);
|
||
if(needShiftPress) {
|
||
robot.keyPress(KeyEvent.VK_SHIFT);
|
||
}
|
||
int event = KeyEvent.getExtendedKeyCodeForChar(symbol);
|
||
try {
|
||
robot.keyPress(event);
|
||
} catch (Exception e) {}
|
||
if(needShiftPress) {
|
||
robot.keyRelease(KeyEvent.VK_SHIFT);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
* Получение картинки размером [width x height] с экрана с позиции [x, y]
|
||
* Если width или height равны -1, то возвращаем весь экран.
|
||
*/
|
||
public BufferedImage getImage(int x, int y, int width, int height) {
|
||
Rectangle area;
|
||
if ((width == -1) || (height == -1)) {
|
||
area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
|
||
} else area = new Rectangle(x, y, width, height);
|
||
return robot.createScreenCapture(area);
|
||
}
|
||
|
||
}
|