마우스 움직임과 클릭을 자동화하는 자바 프로그램을 작성할 수 있습니까 ??마우스와 키보드를 자동화하는 방법은 무엇입니까?
처럼, 그럼 내가 프로그램을 실행 할 수있을 것입니다 그리고 내가 로봇 클래스에 대해 알고
.. 어떤 인간이 기계를 제어하는 것처럼 작동합니다. 그게 해결책일까요? 어떤 생각이든 환영합니다 ...
마우스 움직임과 클릭을 자동화하는 자바 프로그램을 작성할 수 있습니까 ??마우스와 키보드를 자동화하는 방법은 무엇입니까?
처럼, 그럼 내가 프로그램을 실행 할 수있을 것입니다 그리고 내가 로봇 클래스에 대해 알고
.. 어떤 인간이 기계를 제어하는 것처럼 작동합니다. 그게 해결책일까요? 어떤 생각이든 환영합니다 ...
글쎄, 다시 당신입니다. java.awt.Robot이 솔루션입니다. 직접 해보십시오. 사용하기 쉽습니다. 마우스와 키보드를 자동화 할 수 있습니다.
Robot 클래스를 사용하는 클래스 중 하나입니다. 나는 오래전에 그것을 썼다. 전체 코드를 게시하고 있습니다. 스스로를 시도 ..
package MyRobot;
import java.awt.Color;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MyRobot {
Robot MYROBOT;
Color SCREEN[][];
int SCREEN_X;
int SCREEN_Y;
int WINDOW_X;
int WINDOW_Y;
int TYPE_DELAY = 0;
int MOUSE_DELAY = 0;
int SKILL = 0;
int X, Y;
int lastX, lastY;
int savedX, savedY;
int RED, GREEN, BLUE;
Color PIX_CLOSE_ACTIVE_OFF_MOUSE;
Color PIX_CLOSE_ACTIVE_ON_MOUSE;
HashMap<Character, Integer> KEYMAP;
ArrayList<Integer> randKeys;
GraphicsEnvironment grEnv;
GraphicsDevice grDevice;
JPanel drawPanel;
BufferedImage bufImg;
Rectangle rect;
public static void main(String[] args) {
new MyRobot().go();
}
void go() {
initialize();
gotoxy(100, 100);
}
void initialize() {
grEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
grDevice = grEnv.getDefaultScreenDevice();
updateScreenInfo();
setKeyMap();
try {
MYROBOT = new Robot();
} catch (Exception e) {
JOptionPane.showOptionDialog(null, "Can't build the robot!", "Error", -1, 1, null, null, this);
System.exit(1);
}
X = SCREEN_X/2;
Y = SCREEN_Y/2;
//MYROBOT.mouseMove(X, Y);
PIX_CLOSE_ACTIVE_OFF_MOUSE = new Color(184, 67, 44);
PIX_CLOSE_ACTIVE_ON_MOUSE = new Color(210, 35, 2);
}
void updateScreenInfo() {
SCREEN_X = grDevice.getDisplayMode().getWidth();
SCREEN_Y = grDevice.getDisplayMode().getHeight();
WINDOW_X = grEnv.getMaximumWindowBounds().width;
WINDOW_Y = grEnv.getMaximumWindowBounds().height;
}
void setKeyMap() {
KEYMAP = new HashMap<Character, Integer>();
KEYMAP.put('q', 81);
KEYMAP.put('w', 87);
KEYMAP.put('e', 69);
KEYMAP.put('r', 82);
KEYMAP.put('t', 84);
KEYMAP.put('y', 89);
KEYMAP.put('u', 85);
KEYMAP.put('i', 73);
KEYMAP.put('o', 79);
KEYMAP.put('p', 80);
KEYMAP.put('a', 65);
KEYMAP.put('s', 83);
KEYMAP.put('d', 68);
KEYMAP.put('f', 70);
KEYMAP.put('g', 71);
KEYMAP.put('h', 72);
KEYMAP.put('j', 74);
KEYMAP.put('k', 75);
KEYMAP.put('l', 76);
KEYMAP.put('z', 90);
KEYMAP.put('x', 88);
KEYMAP.put('c', 67);
KEYMAP.put('v', 86);
KEYMAP.put('b', 66);
KEYMAP.put('n', 78);
KEYMAP.put('m', 77);
KEYMAP.put('1', 49);
KEYMAP.put('2', 50);
KEYMAP.put('3', 51);
KEYMAP.put('4', 52);
KEYMAP.put('5', 53);
KEYMAP.put('6', 54);
KEYMAP.put('7', 55);
KEYMAP.put('8', 56);
KEYMAP.put('9', 57);
KEYMAP.put('0', 48);
KEYMAP.put(' ', 32);
randKeys = new ArrayList<Integer>();
for (int j = 44; j < 94; j++) {
randKeys.add(j);
}
randKeys.remove(randKeys.indexOf(58));
randKeys.remove(randKeys.indexOf(60));
randKeys.remove(randKeys.indexOf(62));
randKeys.remove(randKeys.indexOf(63));
randKeys.remove(randKeys.indexOf(64));
}
void typeHuman(String letters) {
MYROBOT.setAutoDelay(TYPE_DELAY);
char[] letter = letters.toCharArray();
for (int i = 0; i < letter.length; i++) {
System.out.print(letter[i]);
try {
if ((int) (Math.random() * SKILL) == (int) (Math.random() * SKILL)/2) {
int limit = (int) ((Math.random() * 3) + 1);
for (int j = 0; j < limit; j++) {
int k = (int) (Math.random() * (randKeys.size() - 1));
manuPress(randKeys.get(k));
}
sleep(200);
for (int j = 0; j < limit; j++) {
backspace();
}
}
if ((Character.isLowerCase(letter[i])) || (Character.isDigit(letter[i]))) {
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
} else {
letter[i] = Character.toLowerCase(letter[i]);
MYROBOT.keyPress(16);
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(16);
}
} catch (Exception e) {
switch (letter[i]) {
case '!': {
manuPressSHIFTED(49);
break;
}
case '@': {
manuPressSHIFTED(50);
break;
}
case '#': {
manuPressSHIFTED(51);
break;
}
case '$': {
manuPressSHIFTED(52);
break;
}
case '%': {
manuPressSHIFTED(53);
break;
}
case '^': {
manuPressSHIFTED(54);
break;
}
case '&': {
manuPressSHIFTED(55);
break;
}
case '*': {
manuPressSHIFTED(56);
break;
}
case '(': {
manuPressSHIFTED(57);
break;
}
case ')': {
manuPressSHIFTED(48);
break;
}
case '?': {
manuPressSHIFTED(47);
break;
}
case '/': {
manuPress(47);
break;
}
case ':': {
manuPressSHIFTED(59);
break;
}
case ';': {
manuPress(59);
break;
}
case '.': {
manuPress(46);
break;
}
case ',': {
manuPress(44);
break;
}
case '"': {
manuPressSHIFTED(222);
break;
}
case '\'': {
manuPress(222);
break;
}
case '[': {
manuPress(91);
break;
}
case ']': {
manuPress(93);
break;
}
case '{': {
manuPressSHIFTED(91);
break;
}
case '}': {
manuPressSHIFTED(93);
break;
}
case '\\': {
manuPress(92);
break;
}
case '|': {
manuPressSHIFTED(92);
break;
}
case '=': {
manuPressSHIFTED(61);
break;
}
case '+': {
manuPressSHIFTED(61);
break;
}
case '-': {
manuPress(45);
break;
}
case '_': {
manuPressSHIFTED(45);
break;
}
case '`': {
manuPress(192);
break;
}
case '~': {
manuPressSHIFTED(192);
break;
}
case '<': {
manuPressSHIFTED(44);
break;
}
case '>': {
manuPressSHIFTED(46);
break;
}
}
}
}
System.out.println("");
}
void type(String letters) {
MYROBOT.setAutoDelay(TYPE_DELAY);
char[] letter = letters.toCharArray();
for (int i = 0; i < letter.length; i++) {
System.out.print(letter[i]);
try {
if ((Character.isLowerCase(letter[i])) || (Character.isDigit(letter[i]))) {
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
} else {
letter[i] = Character.toLowerCase(letter[i]);
MYROBOT.keyPress(16);
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(16);
}
} catch (Exception e) {
switch (letter[i]) {
case '!': {
manuPressSHIFTED(49);
break;
}
case '@': {
manuPressSHIFTED(50);
break;
}
case '#': {
manuPressSHIFTED(51);
break;
}
case '$': {
manuPressSHIFTED(52);
break;
}
case '%': {
manuPressSHIFTED(53);
break;
}
case '^': {
manuPressSHIFTED(54);
break;
}
case '&': {
manuPressSHIFTED(55);
break;
}
case '*': {
manuPressSHIFTED(56);
break;
}
case '(': {
manuPressSHIFTED(57);
break;
}
case ')': {
manuPressSHIFTED(48);
break;
}
case '?': {
manuPressSHIFTED(47);
break;
}
case '/': {
manuPress(47);
break;
}
case ':': {
manuPressSHIFTED(59);
break;
}
case ';': {
manuPress(59);
break;
}
case '.': {
manuPress(46);
break;
}
case ',': {
manuPress(44);
break;
}
case '"': {
manuPressSHIFTED(222);
break;
}
case '\'': {
manuPress(222);
break;
}
case '[': {
manuPress(91);
break;
}
case ']': {
manuPress(93);
break;
}
case '{': {
manuPressSHIFTED(91);
break;
}
case '}': {
manuPressSHIFTED(93);
break;
}
case '\\': {
manuPress(92);
break;
}
case '|': {
manuPressSHIFTED(92);
break;
}
case '=': {
manuPressSHIFTED(61);
break;
}
case '+': {
manuPressSHIFTED(61);
break;
}
case '-': {
manuPress(45);
break;
}
case '_': {
manuPressSHIFTED(45);
break;
}
case '`': {
manuPress(192);
break;
}
case '~': {
manuPressSHIFTED(192);
break;
}
case '<': {
manuPressSHIFTED(44);
break;
}
case '>': {
manuPressSHIFTED(46);
break;
}
}
}
}
System.out.println("");
}
void typeln(String letters) {
type(letters);
enter();
}
void typelnHuman(String letters) {
typeHuman(letters);
enter();
}
void getRun() {
MYROBOT.keyPress(524);
MYROBOT.keyPress(82);
MYROBOT.keyRelease(82);
MYROBOT.keyRelease(524);
sleep(500);
}
void combinePress(int keyOne, int keyTwo) {
MYROBOT.keyPress(keyOne);
MYROBOT.keyPress(keyTwo);
MYROBOT.keyRelease(keyTwo);
MYROBOT.keyRelease(keyOne);
}
void combinePress(int keyOne, int keyTwo, int keyThree) {
MYROBOT.keyPress(keyOne);
MYROBOT.keyPress(keyTwo);
MYROBOT.keyPress(keyThree);
MYROBOT.keyRelease(keyThree);
MYROBOT.keyRelease(keyTwo);
MYROBOT.keyRelease(keyOne);
}
void altTab() {
MYROBOT.keyPress(18);
MYROBOT.keyPress(9);
MYROBOT.keyRelease(9);
MYROBOT.keyRelease(18);
}
void winD() {
MYROBOT.keyPress(524);
MYROBOT.keyPress(68);
MYROBOT.keyRelease(68);
MYROBOT.keyRelease(524);
}
void altF4() {
MYROBOT.keyPress(18);
MYROBOT.keyPress(115);
MYROBOT.keyRelease(115);
MYROBOT.keyRelease(18);
}
void enter() {
MYROBOT.keyPress(10);
MYROBOT.keyRelease(10);
}
void backspace() {
MYROBOT.keyPress(8);
MYROBOT.keyRelease(8);
}
void sleep(long duration) {
try {
Thread.sleep(duration);
} catch (Exception e) {
}
}
void click() {
MYROBOT.mousePress(16);
MYROBOT.mouseRelease(16);
}
void doubleClick() {
click();
click();
}
void clickNhold(boolean tof) {
if (tof) {
MYROBOT.mousePress(16);
} else {
MYROBOT.mouseRelease(16);
}
}
void rightClick() {
MYROBOT.mousePress(4);
MYROBOT.mouseRelease(4);
}
void rightclickHold(boolean tof) {
if (tof) {
MYROBOT.mousePress(4);
} else {
MYROBOT.mouseRelease(4);
}
}
void middleClick() {
MYROBOT.mousePress(8);
MYROBOT.mouseRelease(8);
}
void manuPress(int code) {
MYROBOT.keyRelease(16);
MYROBOT.keyPress(code);
MYROBOT.keyRelease(code);
}
void manuPressSHIFTED(int code) {
MYROBOT.keyPress(16);
MYROBOT.keyPress(code);
MYROBOT.keyRelease(code);
MYROBOT.keyRelease(16);
}
void gotoxy(int goX, int goY) {
lastX = X;
lastY = Y;
MYROBOT.setAutoDelay(MOUSE_DELAY);
int initX = X;
int initY = Y;
if (goX == X) {
if (goY > Y) {
for (int i = Y; i <= goY; i++) {
Y = i;
MYROBOT.mouseMove(X, Y);
}
} else {
for (int i = Y; i >= goY; i--) {
Y = i;
MYROBOT.mouseMove(X, Y);
}
}
} else if (goX > X) {
for (int i = 0; i <= (goX - initX); i++) {
X = initX + i;
Y = initY + ((i * (goY - initY))/(goX - initX));
MYROBOT.mouseMove(X, Y);
}
} else {
for (int i = 0; i >= (goX - initX); i--) {
X = initX + i;
Y = initY + ((i * (goY - initY))/(goX - initX));
MYROBOT.mouseMove(X, Y);
}
}
}
void getRGB(Color pixel) {
RED = pixel.getRed();
GREEN = pixel.getGreen();
BLUE = pixel.getBlue();
System.out.println(RED + "," + GREEN + "," + BLUE);
}
void savePoint() {
savedX = X;
savedY = Y;
}
void captureScreen() {
System.out.println("Capturing...");
SCREEN = new Color[SCREEN_X][SCREEN_Y];
for (int i = 0; i < SCREEN_X; i++) {
for (int j = 0; j < SCREEN_Y/2; j++) {
SCREEN[i][j] = MYROBOT.getPixelColor(i, j);
}
}
System.out.println("Capturing done");
}
void gotoPixel(Color pixel) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != pixel.getRGB()) {
for (int i = SCREEN_X - 4; i >= 0; i--) {
for (int j = 3; j < SCREEN_Y/2; j++) {
if ((MYROBOT.getPixelColor(i, j).getRGB() == pixel.getRGB())) {
gotoxy(i, j);
i = -1;
break;
}
}
}
}
if (MYROBOT.getPixelColor(X, Y).getRGB() == pixel.getRGB()) {
while (MYROBOT.getPixelColor(X, Y).getRGB() == pixel.getRGB()) {
gotoxy((X - 1), Y);
}
}
}
void emergeFromPixel(Color pixel) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != pixel.getRGB()) {
for (int i = SCREEN_X - 4; i >= 0; i--) {
for (int j = 3; j < SCREEN_Y/2; j++) {
if ((MYROBOT.getPixelColor(i, j).getRGB() == pixel.getRGB())) {
MYROBOT.mouseMove(i, j);
X = i;
Y = j;
i = -1;
break;
}
}
}
}
}
void shift(char dir) {
int initX = X;
Color initPixel;
dir = Character.toUpperCase(dir);
switch (dir) {
case 'L': {
gotoxy((X - 8), Y);
initPixel = MYROBOT.getPixelColor(X, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X - 1), Y);
}
initX = X;
for (int i = initX; i > initX - 20; i--) {
if (MYROBOT.getPixelColor(i, Y).getRGB() == initPixel.getRGB()) {
gotoxy(i, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X - 1), Y);
}
break;
}
}
break;
}
case 'R': {
initPixel = MYROBOT.getPixelColor(X, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X + 1), Y);
}
initX = X;
for (int i = initX; i < initX + 20; i++) {
if (MYROBOT.getPixelColor(i, Y).getRGB() == initPixel.getRGB()) {
gotoxy(i, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X + 1), Y);
}
break;
}
}
gotoxy((X + 8), Y);
break;
}
}
}
void emergeFromButton(String butName) {
int tempDelay = TYPE_DELAY;
TYPE_DELAY = 0;
MYROBOT.setAutoDelay(TYPE_DELAY);
butName = butName.toUpperCase();
if (butName.equals("CLOSE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
} else if (butName.equals("MAXIMIZE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
} else if (butName.equals("MINIMIZE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
shift('L');
} else if (butName.equals("START")) {
MYROBOT.mouseMove(20, SCREEN_Y - 10);
}
TYPE_DELAY = tempDelay;
MYROBOT.setAutoDelay(TYPE_DELAY);
}
void gotoButton(String butName) {
butName = butName.toUpperCase();
if (butName.equals("CLOSE")) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != PIX_CLOSE_ACTIVE_ON_MOUSE.getRGB()) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
}
} else if (butName.equals("MAXIMIZE")) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
} else if (butName.equals("MINIMIZE")) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
shift('L');
} else if (butName.equals("START")) {
gotoxy(20, SCREEN_Y - 10);
}
}
void catchTitleBar() {
gotoButton("CLOSE");
gotoxy(X - 150, Y);
}
void pressKey(String keyName) {
keyName = keyName.toUpperCase();
if (keyName.equals("ESC")) {
manuPress(27);
}
}
void closeAllWindows() {
while ((MYROBOT.getPixelColor(65, SCREEN_Y - 35).getRed() > 213) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getGreen() > 220) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getBlue() > 228)) {
altTab();
gotoButton("CLOSE");
sleep(100);
click();
sleep(50);
}
}
void quickCloseAllWindows() {
while ((MYROBOT.getPixelColor(65, SCREEN_Y - 35).getRed() > 213) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getGreen() > 220) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getBlue() > 228)) {
winD();
sleep(100);
altTab();
altF4();
type("n");
}
}
void getNotepad() {
int saveDelay = TYPE_DELAY;
TYPE_DELAY = 0;
MYROBOT.setAutoDelay(0);
MYROBOT.keyPress(524);
MYROBOT.keyPress(82);
MYROBOT.keyRelease(82);
MYROBOT.keyRelease(524);
sleep(200);
typeln("notepad");
sleep(500);
TYPE_DELAY = saveDelay;
MYROBOT.setAutoDelay(TYPE_DELAY);
}
void closeActiveWindow() {
gotoButton("CLOSE");
click();
type("n");
}
void openMyComputer() {
gotoxy(50, 50);
doubleClick();
}
void lockMouse() {
Thread lockMouse = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
MYROBOT.mouseMove(X, Y);
sleep(100);
}
}
});
lockMouse.start();
}
}
당신은 나 한테 빚진 ...
로봇 수업은 당신이하고 싶은 일에 잘 작동합니다. 이 자습서를 확인하십시오 here
또한 다른 자동화 된 테스트 프레임 워크를 살펴볼 수 있습니다. 마음에 떠오르는 것은 testComplete입니다. UI 테스트 목적으로 이것을 사용하려고합니까?
많이 도움이 된 고맙습니다! – Anubis
예, 즉 로봇 클래스가 정확히 것입니다. 너 해봤 니? – Keppil
나는 전에 많은 것을 배웠다. 고맙습니다! – Anubis