上传备份

wjdr
王兵 1 year ago
parent abfa5a9b44
commit 350d9c1180

@ -2,7 +2,6 @@
<project version="4"> <project version="4">
<component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="PROJECT" charset="UTF-8" /> <file url="PROJECT" charset="UTF-8" />
</component> </component>
</project> </project>

@ -25,10 +25,6 @@ import java.util.concurrent.TimeUnit;
*/ */
public class JMacro { public class JMacro {
public static void main(String[] args) throws AWTException {
System.out.println("L0,0-A.png".matches("L[0-9]+,[0-9]+-[\\S\\s]+"));
}
/** /**
* *
*/ */
@ -117,9 +113,9 @@ public class JMacro {
*/ */
public void mouseLeftClick(ScreenPoint rect) { public void mouseLeftClick(ScreenPoint rect) {
mouseMove(rect); mouseMove(rect);
robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
waitTap(); waitTap();
robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} }
/** /**
@ -151,11 +147,11 @@ public class JMacro {
public void mouseLeftDrag(ScreenPoint start, ScreenPoint end, boolean smooth) { public void mouseLeftDrag(ScreenPoint start, ScreenPoint end, boolean smooth) {
mouseMove(start, smooth); mouseMove(start, smooth);
waitTap(); waitTap();
robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
waitTap(); waitTap();
mouseMove(end, smooth); mouseMove(end, smooth);
waitTap(); waitTap();
robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} }
/** /**
@ -178,11 +174,11 @@ public class JMacro {
public void mouseRightDrag(ScreenPoint start, ScreenPoint end, boolean smooth) { public void mouseRightDrag(ScreenPoint start, ScreenPoint end, boolean smooth) {
mouseMove(start, smooth); mouseMove(start, smooth);
waitTap(); waitTap();
robot.mousePress(InputEvent.BUTTON3_MASK); robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
waitTap(); waitTap();
mouseMove(end, smooth); mouseMove(end, smooth);
waitTap(); waitTap();
robot.mouseRelease(InputEvent.BUTTON3_MASK); robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
} }
/** /**
@ -194,9 +190,9 @@ public class JMacro {
waitTap(); waitTap();
robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]); robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]);
waitTap(); waitTap();
robot.mousePress(InputEvent.BUTTON2_MASK); robot.mousePress(InputEvent.BUTTON2_DOWN_MASK);
waitTap(); waitTap();
robot.mouseRelease(InputEvent.BUTTON2_MASK); robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK);
} }
/** /**
@ -208,9 +204,9 @@ public class JMacro {
waitTap(); waitTap();
robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]); robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]);
waitTap(); waitTap();
robot.mousePress(InputEvent.BUTTON3_MASK); robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
waitTap(); waitTap();
robot.mouseRelease(InputEvent.BUTTON3_MASK); robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
} }
/** /**
@ -222,13 +218,13 @@ public class JMacro {
waitTap(); waitTap();
robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]); robot.mouseMove(rect.getCenter()[0], rect.getCenter()[1]);
waitTap(); waitTap();
robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.delay(100); robot.delay(100);
robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.delay(100); robot.delay(100);
robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.delay(100); robot.delay(100);
robot.mouseRelease(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} }
/** /**
@ -406,12 +402,12 @@ public class JMacro {
/** /**
* *
* *
* @param point * @param rect
* @param file * @param file
* @param minSimilar * @param minSimilar
* @return * @return
*/ */
public ScreenRect matchPic(ScreenPoint point, File file, double minSimilar) { public ScreenRect matchPic(ScreenRect rect, File file, double minSimilar) {
String name = file.getName(); String name = file.getName();
int offsetX = 0; int offsetX = 0;
int offsetY = 0; int offsetY = 0;
@ -420,8 +416,8 @@ public class JMacro {
offsetY = Convert.toInt(ReUtil.get("L[0-9]+,([0-9]+)-[\\S\\s]+", name, 1), 0); offsetY = Convert.toInt(ReUtil.get("L[0-9]+,([0-9]+)-[\\S\\s]+", name, 1), 0);
} }
ScreenRect screenRect = new ScreenRect(); ScreenRect screenRect = new ScreenRect();
screenRect.setLeft(point.getX() + offsetX); screenRect.setLeft(rect.getLeft() + offsetX);
screenRect.setTop(point.getY() + offsetY); screenRect.setTop(rect.getTop() + offsetY);
BufferedImage image = Imager.load(file); BufferedImage image = Imager.load(file);
screenRect.setRight(screenRect.getLeft() + image.getWidth()); screenRect.setRight(screenRect.getLeft() + image.getWidth());
screenRect.setBottom(screenRect.getTop() + image.getHeight()); screenRect.setBottom(screenRect.getTop() + image.getHeight());
@ -429,15 +425,43 @@ public class JMacro {
return findPic(screenRect, image, minSimilar); return findPic(screenRect, image, minSimilar);
} }
/**
*
*
* @param rect
* @param legendName
* @param minSimilar
* @return
*/
public ScreenRect matchPic(ScreenRect rect, String legendName, double minSimilar) {
return matchPic(rect, new File(legend, legendName), minSimilar);
}
/** /**
* *
* *
* @param point * @param rect
* @param file * @param file
* @param minSimilar * @param minSimilar
* @return * @return
*/ */
public boolean isMatchPic(ScreenPoint point, File file, double minSimilar) { public boolean isMatchPic(ScreenRect rect, File file, double minSimilar) {
return matchPic(point, file, minSimilar) != null; return matchPic(rect, file, minSimilar) != null;
} }
/**
*
*
* @param rect
* @param legendName
* @param minSimilar
* @return
*/
public boolean isMatchPic(ScreenRect rect, String legendName, double minSimilar) {
if (!legendName.endsWith(".png")) {
legendName = legendName + ".png";
}
return matchPic(rect, new File(legend, legendName), minSimilar) != null;
}
} }

@ -3,7 +3,6 @@ package com.example.jmacro.wjdr;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.example.jmacro.wjdr.base.ScreenPoint;
import com.example.jmacro.wjdr.base.ScreenRect; import com.example.jmacro.wjdr.base.ScreenRect;
import com.example.jmacro.wjdr.task.TaskMining; import com.example.jmacro.wjdr.task.TaskMining;
import com.example.jmacro.wjdr.util.Imager; import com.example.jmacro.wjdr.util.Imager;
@ -46,7 +45,7 @@ public class MainTask {
Logger.setDebug(true); Logger.setDebug(true);
Logger.info("初始化脚本"); Logger.info("初始化脚本");
JMacro jMacro = new JMacro(); JMacro jMacro = new JMacro(new File("legend"));
while (true) { while (true) {
ThreadUtil.sleep(1000); ThreadUtil.sleep(1000);
@ -165,7 +164,7 @@ public class MainTask {
} }
{ // 定位离线收益弹框,关闭弹框 { // 定位离线收益弹框,关闭弹框
ScreenRect rect = jMacro.matchPic(new ScreenPoint(gameScreen.getLeft(),gameScreen.getTop()), new File("legend", "L204,734-城镇_离线收益.png"), 0.9); ScreenRect rect = jMacro.matchPic(gameScreen, new File("legend", "L204,734-城镇_离线收益.png"), 0.9);
if (rect != null) { if (rect != null) {
jMacro.mouseLeftClick(rect); jMacro.mouseLeftClick(rect);
Logger.info("检测到离线收益弹框,关闭弹框"); Logger.info("检测到离线收益弹框,关闭弹框");
@ -173,7 +172,7 @@ public class MainTask {
} }
{ // 定位主程序 { // 定位主程序
ScreenRect rect = jMacro.matchPic(new ScreenPoint(gameScreen.getLeft(),gameScreen.getTop()), new File("legend", "L444,888-野外.png"), 0.9); ScreenRect rect = jMacro.matchPic(gameScreen, new File("legend", "L444,888-野外.png"), 0.9);
if (rect != null) { if (rect != null) {
Logger.info("程序主界面已就绪"); Logger.info("程序主界面已就绪");
return rect; return rect;

@ -1,34 +1,97 @@
package com.example.jmacro.wjdr.util; package com.example.jmacro.wjdr.util;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.log.StaticLog; import cn.hutool.log.StaticLog;
import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;
import javax.swing.*; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*; import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.util.prefs.Preferences;
/** /**
* *
*/ */
public class Capture extends JFrame { public class Capture extends JFrame {
// 退出 private static final String LAST_PATH = "capture.last.path";
private final int KEY_MARK_ESC = 1;
/**
* x
*/
private int originX;
/**
* y
*/
private int originY;
/**
*
*/
private BufferedImage capture;
/**
*
*/
private Color mask = new Color(0, 0, 0, 0.2f);
/**
* 线
*/
private Stroke focusWindow = new BasicStroke(1.0f);
/**
*
*/
private Point start = new Point(0, 0);
/**
*
*/
private Point end = new Point(0, 0);
private Preferences preferences;
/**
*
*
* @param originX x
* @param originY y
* @throws AWTException
*/
public Capture(int originX, int originY, File path) throws AWTException {
this();
this.originX = originX;
this.originY = originY;
this.preferences.put(LAST_PATH, path.isDirectory() ? path.getAbsolutePath() : path.getParent());
}
public Capture() { public Capture() throws AWTException {
init(); init();
} }
private void init() { private void init() throws AWTException {
setExtendedState(Frame.MAXIMIZED_BOTH); setExtendedState(Frame.MAXIMIZED_BOTH);
setLocation(0, 0);//位置 setLocation(0, 0);//位置
setUndecorated(true); setUndecorated(true);
setAlwaysOnTop(true); setAlwaysOnTop(true);
setBackground(new Color(0, 0, 0, 0.4f)); setBackground(mask);
// 初始化偏好设置
preferences = Preferences.userRoot().node(this.getClass().getName());
// 获取屏幕截图
Robot robot = new Robot();
Toolkit tk = Toolkit.getDefaultToolkit();
capture = robot.createScreenCapture(new Rectangle(0, 0, tk.getScreenSize().width, tk.getScreenSize().height));
// 监听窗口关闭 // 监听窗口关闭
addWindowListener(new WindowAdapter() { addWindowListener(new WindowAdapter() {
@ -40,46 +103,137 @@ public class Capture extends JFrame {
} }
}); });
// 添加热键 addMouseListener(new MouseAdapter() {
JIntellitype.getInstance().registerHotKey(KEY_MARK_ESC, 0, KeyEvent.VK_ESCAPE); @Override
JIntellitype.getInstance().addHotKeyListener(hotkeyListener); public void mousePressed(MouseEvent e) {
super.mousePressed(e);
start.setLocation(e.getX(), e.getY());
end.setLocation(e.getX(), e.getY());
Logger.info("起始坐标:{}", start);
repaint();
}
setVisible(true); @Override
} public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
end.setLocation(e.getX(), e.getY());
Logger.info("结束坐标:{}", end);
save();
}
});
private final HotkeyListener hotkeyListener = new HotkeyListener() { addMouseMotionListener(new MouseMotionAdapter() {
@Override @Override
public void onHotKey(int i) { public void mouseDragged(MouseEvent e) {
switch (i) { super.mouseDragged(e);
case KEY_MARK_ESC: { end.setLocation(e.getX(), e.getY());
StaticLog.info("exit."); repaint();
JIntellitype.getInstance().unregisterHotKey(KEY_MARK_ESC); }
JIntellitype.getInstance().removeHotKeyListener(hotkeyListener); });
close();
addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_ESCAPE: {
StaticLog.info("exit.");
close();
}
break;
} }
break;
} }
} });
};
setVisible(true);
}
public void close() { @Override
// 关闭应用时要释放资源 public void doLayout() {
dispose(); super.doLayout();
System.exit(0);
} }
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(capture, 0, 0, capture.getWidth(), capture.getHeight(), this);
// 在背景图上加个蒙层
g2d.setColor(mask);
g2d.fillRect(0, 0, capture.getWidth(), capture.getHeight());
int w = getCaptureWidth();
int h = getCaptureHeight();
if (w > 0 && h > 0) {
g2d.setStroke(focusWindow);
g2d.setColor(Color.green);
g2d.drawRect(getCaptureX(), getCaptureY(), w, h);
}
}
public static void main(String[] args) { public int getCaptureX() {
int originX = 0; return (int) Math.min(start.getX(), end.getX()) + originX;
int originY = 0; }
File legend = new File("legend"); public int getCaptureY() {
return (int) Math.min(start.getY(), end.getY()) + originY;
}
public int getCaptureWidth() {
return (int) Math.abs(start.getX() - end.getX());
}
System.out.println("请将鼠标移动截图位置的左上角并且按下Ctrl"); public int getCaptureHeight() {
return (int) Math.abs(start.getY() - end.getY());
}
public void save() {
// 上一次保存目录
String lastPath = preferences.get(LAST_PATH, "");
// 默认文件名
String prefix = "L" + getCaptureX() + "," + getCaptureY() + "-";
String filename = prefix + System.currentTimeMillis() + ".png";
JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setFileFilter(new FileNameExtensionFilter("png", "png"));
jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
jFileChooser.setCurrentDirectory(new File(lastPath));
jFileChooser.setSelectedFile(new File(filename));
int returnVal = jFileChooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
// 默认文件
File file = jFileChooser.getSelectedFile();
// 修正坐标
filename = prefix + file.getName().replaceAll("L[0-9]+,[0-9]+-", "");
file = new File(file.getParent(), filename);
Logger.info("保存路径" + file);
ImgUtil.cut(capture, file, new Rectangle(getCaptureX(), getCaptureY(), getCaptureWidth(), getCaptureHeight()));
preferences.put(LAST_PATH, file.getParent());
Logger.info("保存目录" + file.getParent());
Logger.info("保存地址" + file);
}
close();
}
public void close() {
// 关闭应用时要释放资源
dispose();
System.exit(0);
}
Capture capture = new Capture(); /**
*
*
* @param args
* @throws AWTException
*/
public static void main(String[] args) throws AWTException {
// 运行坐标图例截图工具
new Capture(5, 5, new File("legend"));
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.