From ca195e69856f709e0eaece4702833c5903f66126 Mon Sep 17 00:00:00 2001 From: wangbing Date: Thu, 24 Jul 2025 17:41:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/xyz/wbsite/jmacro/JMacro.java | 38 +++- .../xyz/wbsite/jmacro/JMainController.java | 35 +++- .../java/xyz/wbsite/jmacro/JMainService.java | 21 +- src/main/java/xyz/wbsite/jtask/TaskImpl.java | 9 +- src/main/resources/main.fxml | 194 ++++++++++-------- src/main/resources/set.png | Bin 0 -> 1320 bytes 6 files changed, 190 insertions(+), 107 deletions(-) create mode 100644 src/main/resources/set.png diff --git a/src/main/java/xyz/wbsite/jmacro/JMacro.java b/src/main/java/xyz/wbsite/jmacro/JMacro.java index 32e5eb0..9f54b38 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMacro.java +++ b/src/main/java/xyz/wbsite/jmacro/JMacro.java @@ -33,6 +33,11 @@ import java.util.concurrent.TimeUnit; */ public abstract class JMacro { + /** + * 脚本执行状态 + */ + private boolean run; + /** * 默认超时秒数 */ @@ -59,6 +64,14 @@ public abstract class JMacro { } } + public boolean isRun() { + return run; + } + + public void setRun(boolean run) { + this.run = run; + } + public int getDefaultTimeOut() { return defaultTimeOut; } @@ -95,7 +108,30 @@ public abstract class JMacro { /** * 执行脚本 */ - public abstract void run(); + public void start() { + if (this.run) { + Logger.error("脚本正在运行中"); + return; + } + this.run = true; + this.task(); + } + + /** + * 执行脚本 + */ + public abstract void task(); + + /** + * 停止脚本 + */ + public void stop() { + if (!this.run) { + Logger.error("脚本未运行"); + return; + } + this.run = false; + } /** * 键盘按键组 diff --git a/src/main/java/xyz/wbsite/jmacro/JMainController.java b/src/main/java/xyz/wbsite/jmacro/JMainController.java index 2491e8d..3a93297 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMainController.java +++ b/src/main/java/xyz/wbsite/jmacro/JMainController.java @@ -1,14 +1,20 @@ package xyz.wbsite.jmacro; import cn.hutool.core.collection.BoundedPriorityQueue; +import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.StrUtil; +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; +import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.TextArea; +import javafx.scene.control.Tooltip; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.util.Duration; import xyz.wbsite.jmacro.base.Legend; import xyz.wbsite.jmacro.base.ViewRect; import xyz.wbsite.jmacro.tool.Measure; @@ -16,7 +22,6 @@ import xyz.wbsite.jmacro.tool.PickLegend; import xyz.wbsite.jmacro.tool.PickPoint; import xyz.wbsite.jmacro.tool.PickRect; import xyz.wbsite.jmacro.util.DialogUtil; -import xyz.wbsite.jmacro.util.Logger; import java.awt.*; import java.net.URL; @@ -37,6 +42,8 @@ public class JMainController implements Initializable { @FXML private Button stop; @FXML + private ImageView set; + @FXML private Button capture; @FXML private ImageView preview; @@ -51,7 +58,7 @@ public class JMainController implements Initializable { @Override public void initialize(URL location, ResourceBundle resources) { // 控件初始化 - Logger.info("控件初始化完成"); + installTip(set, "扩展配置"); } /** @@ -180,4 +187,28 @@ public class JMainController implements Initializable { console.appendText(format); }); } + + + /** + * 给组件增加鼠标悬浮提示 + * + * @param node + * @param tip + */ + public static void installTip(Node node, String tip) { + Tooltip tooltip = new Tooltip(tip); + try { + java.lang.reflect.Field behavior = ClassUtil.getDeclaredField(Tooltip.class, "BEHAVIOR"); + behavior.setAccessible(true); + Object o = behavior.get(tooltip); + java.lang.reflect.Field activationTimer = ClassUtil.getDeclaredField(o.getClass(), "activationTimer"); + activationTimer.setAccessible(true); + Timeline timeline = (Timeline) activationTimer.get(o); + timeline.getKeyFrames().remove(0); + timeline.getKeyFrames().add(new KeyFrame(new Duration(10))); + Tooltip.install(node, tooltip); + } catch (Exception e) { + + } + } } diff --git a/src/main/java/xyz/wbsite/jmacro/JMainService.java b/src/main/java/xyz/wbsite/jmacro/JMainService.java index 4365a71..0383699 100644 --- a/src/main/java/xyz/wbsite/jmacro/JMainService.java +++ b/src/main/java/xyz/wbsite/jmacro/JMainService.java @@ -4,7 +4,6 @@ import cn.hutool.core.thread.ThreadUtil; import xyz.wbsite.jmacro.base.Legend; import xyz.wbsite.jmacro.util.DialogUtil; import xyz.wbsite.jmacro.util.Logger; -import xyz.wbsite.jtask.TaskImpl; import java.io.File; @@ -94,10 +93,14 @@ public class JMainService { return false; } // 停止服务 - Logger.info("停止服务"); - // 关闭守护线程 JMainService.getInstance().run = false; + // 立即停止脚本 + if (JMainService.getInstance().macro.isRun()) { + JMainService.getInstance().macro.stop(); + } + // 关闭守护线程 JMainService.getInstance().daemonThread.interrupt(); + Logger.info("停止服务"); return true; } @@ -112,10 +115,10 @@ public class JMainService { Logger.info("脚本未设置"); return; } - while (run) { + while (run && !Thread.currentThread().isInterrupted()) { try { ThreadUtil.sleep(1000); - macro.run(); + macro.start(); } catch (Exception e) { if ((e instanceof InterruptedException) || e.getMessage().contains(InterruptedException.class.getSimpleName())) { // 服务停止 @@ -128,12 +131,4 @@ public class JMainService { Logger.info("服务停止,守护线程已退出"); } } - - /** - * 服务启动入口 - */ - public static void main(String[] args) { - JMainService.init(new TaskImpl(), new File("legend")); - JMainService.start(); - } } diff --git a/src/main/java/xyz/wbsite/jtask/TaskImpl.java b/src/main/java/xyz/wbsite/jtask/TaskImpl.java index bf3a0ba..d376b67 100644 --- a/src/main/java/xyz/wbsite/jtask/TaskImpl.java +++ b/src/main/java/xyz/wbsite/jtask/TaskImpl.java @@ -1,6 +1,5 @@ package xyz.wbsite.jtask; -import cn.hutool.core.util.RandomUtil; import xyz.wbsite.jmacro.JMacro; import xyz.wbsite.jmacro.base.ViewRect; import xyz.wbsite.jmacro.util.Logger; @@ -24,7 +23,7 @@ public class TaskImpl extends JMacro { } @Override - public void run() { + public void task() { // 此处我们模拟一个简单的脚本 // 比如在window11打开我的电脑再关闭 Logger.info("启动任务"); @@ -52,13 +51,11 @@ public class TaskImpl extends JMacro { Logger.info("定位到我的电脑窗口"); Logger.info("移动鼠标"); mouseMove(windows.getCenter().offsetX(100), true); - mouseLeftClick(windows.getCenter().offsetX(100)); + Logger.info("等待3秒后自动关闭"); delay(3 * 1000); + mouseLeftClick(windows.getCenter().offsetX(100)); Logger.info("结束任务"); - int randomInt = RandomUtil.randomInt(5, 10); - Logger.info("随机休眠{}分钟", randomInt); - delay(randomInt * 60 * 1000); } } diff --git a/src/main/resources/main.fxml b/src/main/resources/main.fxml index 2851f04..fb5c1ea 100644 --- a/src/main/resources/main.fxml +++ b/src/main/resources/main.fxml @@ -1,94 +1,118 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/set.png b/src/main/resources/set.png new file mode 100644 index 0000000000000000000000000000000000000000..8cbc5ea9645b71350529a228ded32622cb2c5e6c GIT binary patch literal 1320 zcmV+@1=sqCP)Px(;z>k7R9HvFS50UgRTTctyou;SuxiCxkXo%li$DFLwbn&S7lI+lz4LfQP-;r0 zU5MzS7;$6WC>Behi(-qdEh>TobMAXlC{nS4wL*>6V8pck6lzs03c;UXGBd~A$4r<^ zW?u4ikqd9}?%aFkJLi1gIcEq9yl8>nk2wKot+xSq7QpQZ*i&&F@2J=7U+2LqrS=oi zlK@7D=(vcSVCLhkoNNie^SswZq(5(fh|UH`Z{*LAP+egF4dxZeTL1z>Tq z{|A6!5qZoQ^Ih(2(@q@6D~otDp9t(S#_TNuTCG-BOioTZjYea%=($pAcanw%GxxQX z0;QB9B2Lh6tk>%{C2g%ViXyVf7;~~M0QRuf+7hcvM0Ofu4z=@kt@RxMtW-}j^QN{{ zptXJkz?%SmV&6hB2odcGQG&mGl=bZ-aZj|I%jw!j^iy>6)Aup04xJ=A^A1Wi---~ zw5+t&7Ni9`Z6NOe5$z3vU|05qp64ADk+hUs`P$Wt7-g#%5#1C7!Oumx>g(&f({Y@U zsR}p5%xm*!lu|Y|pV@uab#L%}|8kL?Y_vsWQ5L`jX1=A2t(kltVdm{6#=im3NknUc zAo#q@me%@50G4N~rU4Mqa1aFdv;fdgM7B8{FvdJl0^lpl2dj=oqj9zcfM&{VeV|&c zwloYwiwH!tE(n4%MHj8?;yC_NM9xN0^gznu^sMK38%5;fBn3-+-~Xi~mFpeH`846! zrj&$l19%vKt?5JQ#W;?)*6a0)>3^;DFo3%Xq4R1IOn1$ z`XZkOt+kz|UjlHNneU%>3Nq*~yRN&+_x(%h<%Fp3647lrgYQof@WJd}tya4>48z~- zUcO1C=L%Dh>kl)^YDQMs38&d$L}Z&W=4eI*=}0y_)m96uY$*ql4z>fpKUQ9@>mCln za8=s2MPyp`}?mP8ymCwZx*BMBBG-~ z5X|~uX_