API
https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
참고 사이트
https://velog.io/@nkstar00/Java%EB%A1%9C-Macro%EB%A5%BC-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90
키보드 버튼 값 매핑
https://stackoverflow.com/questions/15313469/java-keyboard-keycodes-list/31637206
https://github.com/kkimsungchul/study/tree/master/JAVA%26Spring/%5BJAVA%5D%20Robot%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
자바로도 매크로가 만들어 지나 테스트 해봄
keyPress 키보드를 누름
keyRelease 키보드를 땜
delay 지연시간 (단위 ms)
==================================================================================================================================================
Robot robot = new Robot();
int macroKey = "65";
robot.keyPress(macroKey);
robot.keyRelease(macroKey);
robot.delay(100);
==================================================================================================================================================
65는 키보드 A 임
대문자를 입력해야 할 경우, 대문자의 앞 뒤에 shift 를 넣어주면됨
, 로 구분하여서 특정문자들은 순서대로 입력하도록 설정하였음
==================================================================================================================================================
String macroWord = "windows,c,m,d,enter,i,p,shift,c,o,n,shift,f,i,g,enter";
==================================================================================================================================================
======================================================================================================
try{
Robot robot = new Robot();
robot.mouseMove(605, 85);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);//좌클릭 다운
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);//좌클릭 업
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);//좌클릭 다운
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);//좌클릭 업
}catch(Exception e) {
System.out.println("실패");
e.printStackTrace();
}
======================================================================================================
메이플월드에서 빨코3에서 사용하려고 만든 매크로
좌우이동 / 버프 / 제네시스를 사용하도록 키세팅을 해놓앗음
==========================================================================
package org.example;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
public class Main {
static Robot robot;
public static void main(String[] args) {
List<String> macroList = new ArrayList<>();
macroList.add("A");
try {
robot = new Robot();
try {
Thread teleportThread = new Thread(() -> {
try {
while(true){
move("LEFT");
move("RIGHT");
}
} catch (Exception e) {
e.printStackTrace();
}
});
Thread genesisThread = new Thread(() -> {
try {
while(true){
pressKey("A");
releaseKey("A");
Thread.sleep(3500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread buffThread = new Thread(() -> {
try {
while(true){
pressKey("END");
releaseKey("END");
Thread.sleep(500);
pressKey("HOME");
releaseKey("HOME");
Thread.sleep(60000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 각 스레드 시작
teleportThread.start();
genesisThread.start();
buffThread.start();
// 메인 스레드는 아래의 스레드가 모두 종료될 때까지 대기
teleportThread.join();
genesisThread.join();
buffThread.join();
System.out.println("Both threads are finished.");
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void move(String directionWord){
try{
if(directionWord.equalsIgnoreCase("LEFT")){
pressKey("LEFT");
Thread.sleep(5000);
releaseKey("LEFT");
}else if (directionWord.equalsIgnoreCase("RIGHT")){
pressKey("RIGHT");
Thread.sleep(7000);
releaseKey("RIGHT");
}
}catch (Exception e) {
System.err.println("teleport error");
e.printStackTrace();
}
}
private static void teleport(String directionWord){
try{
if(directionWord.equalsIgnoreCase("UP")){
pressKey("UP");
pressKey("PAGE_DOWN");
Thread.sleep(500);
releaseKey("PAGE_DOWN");
releaseKey("UP");
}else if (directionWord.equalsIgnoreCase("DOWN")){
pressKey("DOWN");
pressKey("PAGE_DOWN");
Thread.sleep(500);
releaseKey("PAGE_DOWN");
releaseKey("DOWN");
}
}catch (Exception e) {
System.err.println("teleport error");
e.printStackTrace();
}
}
private static void pressKey(String key) {
int keyCode = getKeyCode(key);
robot.keyPress(keyCode);
}
private static void releaseKey(String key) {
int keyCode = getKeyCode(key);
robot.keyRelease(keyCode);
}
private static int getKeyCode(String key) {
switch (key.toUpperCase()) {
case "A":
return KeyEvent.VK_A;
case "B":
return KeyEvent.VK_B;
case "SHIFT":
return KeyEvent.VK_SHIFT;
case "CTRL":
return KeyEvent.VK_CONTROL;
case "ALT":
return KeyEvent.VK_ALT;
case "DOWN":
return KeyEvent.VK_DOWN;
case "UP":
return KeyEvent.VK_UP;
case "LEFT":
return KeyEvent.VK_LEFT;
case "RIGHT":
return KeyEvent.VK_RIGHT;
case "PAGE_DOWN":
return KeyEvent.VK_PAGE_DOWN;
case "END":
return KeyEvent.VK_END;
case "HOME":
return KeyEvent.VK_HOME;
// 다른 키들도 필요에 따라 추가하세요.
default:
return KeyEvent.getExtendedKeyCodeForChar(key.charAt(0));
}
}
}
==========================================================================