Flood-It-Bot/main/RobotUtils.java

79 lines
2.6 KiB
Java
Raw Permalink Normal View History

2012-01-11 16:38:00 +02:00
package main;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
/**
2012-01-11 16:55:25 +02:00
* Работа с классом Robot.
2012-01-11 16:38:00 +02:00
* @author aNNiMON
*/
public class RobotUtils {
private static final int CLICK_DELAY = 300;
private Robot robot;
/**
2012-01-11 16:55:25 +02:00
* Конструктор
* @throws AWTException ошибка инициализации Robot
2012-01-11 16:38:00 +02:00
*/
public RobotUtils() throws AWTException {
robot = new Robot();
}
/**
2012-01-11 16:55:25 +02:00
* Кликнуть в нужную точку
* @param click точка по которой нужно кликнуть
2012-01-11 16:38:00 +02:00
*/
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);
}
/**
2012-01-11 16:55:25 +02:00
* Автоматически воспроизвести заданную последовательность нажатий
* @param buttons координаты точек, куда следует нажимать
* @param result последовательность id для указания на нужную кнопку
2012-01-11 16:38:00 +02:00
*/
public void autoClick(Point[] buttons, byte[] result) {
for (int i = 0; i < result.length; i++) {
clickPoint(buttons[result[i]]);
}
}
/**
2012-01-11 16:55:25 +02:00
* Автоматическое написание сообщения
* @param text "печатаемый" текст
2012-01-11 16:38:00 +02:00
*/
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);
}
}
}
/*
2012-01-11 16:55:25 +02:00
* Получение картинки размером [width x height] с экрана с позиции [x, y]
* Если width или height равны -1, то возвращаем весь экран.
2012-01-11 16:38:00 +02:00
*/
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);
}
}