Flood-It-Bot/main/RobotUtils.java
2012-01-11 16:38:00 +02:00

79 lines
2.3 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);
}
}