白菜Java自习室 涵盖核心知识
1. 安装 32 位 JDK 1.8
这里强调一下,jdk 1.8 必须是 32 位 的,亲测 64 位不行(最新版大漠插件也存在问题)。
这里提供 jdk 华为云下载镜像:JDK 1.8 华为云镜像下载(选择 jdk-8u192-windows-i586.exe)
2. 注册 和 下载 大漠插件
这里提供大漠插件官方网站地址:大漠插件官方网站
当前时间(看作者文章发布时间)注册充值大漠插件需要注意:
- 由于官方限制流量,目前 账号注册时间限制只能每月1-3号,当然一些论坛上能买到20元空账号;
- 充值的话最低金额为100元,资费为 每天每台机器(电脑)扣费7分钱,不用耍小聪明 F12 改页面表单充值金额,官网后台已经做了校验;
- 这里作者提供的 收费版是百分百稳定可用的,如果你实在不想花钱,请自行百度那种激活成功教程版,但是风险请自行承担;
- 所有一切搞定以后,去软件菜单里下载工具包,下边是大漠插件大概一些组件,注意360安全卫士报毒请添加白名单(放心真的没毒);
3. 安装 大漠插件 到系统
大漠插件的原理是作者采用 vc6.0 编写的 COM 接口,支持任何语言调用,安装大漠插件的意思就是把 .dll 动态链接库文件注册到系统。
运行 注册大漠插件到系统.bat
即可,里边代码内容可以贴出来看下:
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
regsvr32 dm.dll
到这里我们的准备工作就做的差不多了,现在开始就可以新建 Java 项目来使用了。
4. 新建 MAVEN 项目,JDK 导入 JACOB 1.9
新建一个 maven 项目,这里需要额外下载一个 jacob 1.9 的 jar 包,这里是 POM 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dm</groupId>
<artifactId>drone</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.19</version>
</dependency>
</dependencies>
</project>
JACOB 是一个 JAVA-COM 连接组件,这里提供下载地址:jacob.jar 的github下载地址
下载到电脑上,进入 jar 包所在的目录,用 mvn 命令导入到自己电脑的 repository 中:
mvn install:install-file -DgroupId=com.jacob -DartifactId=jacob -Dversion=1.19 -Dpackaging=jar -Dfile=jacob.jar
然后需要将 jacob-1.19-x86.dll
,复制到 32 位 jdk1.8 安装目录的 jre/bin 下边:
5. Java 代码实现(参阅 大漠插件接口说明.chm )
下边是我们项目的大概结构,idea 必须用管理员模式运行:
注意:我们目前实现的是后台键鼠功能,就是后台自动捕捉游戏进程,类似按键精灵输入虚拟信号(按键精灵窗口失焦就会不行),此时你可以把游戏最小化去看电影或者玩别的游戏。当然大漠插件提供了无比强大的 API,读者可以自行去研究,作者比较菜就先用这个将就一下。
打开 大漠插件的接口说明.chm
,就能查看提供的 API 接口:
下边我贴上 Java 代码,具体内容很简单的,相信有 Java 基础的同学都看得懂:
DmConfig.java(插件配置)
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import java.util.ResourceBundle;
public class DmConfig {
private final static String version = "";
private final static String license = ResourceBundle.getBundle("config").getString("license");
/** * 大漠插件执行组件 */
private final ActiveXComponent dm = new ActiveXComponent("dm.dmsoft");
public DmConfig() {
this.version();
this.register();
}
public void version() {
System.out.println("大漠插件版本:" + dm.invoke("Ver").getString());
}
public void register() {
int success = Dispatch.call(dm, "Reg", license, version).getInt();
System.out.println("正在注册插件:" + (success == 1 ? "注册成功" : "注册失败"));
}
public ActiveXComponent getDm() {
return dm;
}
}
TaskConfig(任务配置)
import java.util.ResourceBundle;
public class TaskConfig {
private final String process;
private final String[] vk_codes;
private final long delay;
public TaskConfig() {
ResourceBundle bundle = ResourceBundle.getBundle("config");
this.process = bundle.getString("process");
this.vk_codes = bundle.getString("vk_codes").split(",");
this.delay = Long.parseLong(bundle.getString("interval"));
}
public String getProcess() {
return process;
}
public String[] getVk_codes() {
return vk_codes;
}
public long getDelay() {
return delay;
}
}
TimerService.java(定时线程池)
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class TimerService {
private ScheduledFuture<?> future = null;
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public boolean start(Runnable command, long delay) {
try {
if (future != null) {
future.cancel(false);
}
future = scheduler.scheduleWithFixedDelay(command, 0, delay, TimeUnit.MILLISECONDS);
return true;
} catch (Exception e) {
return false;
}
}
public boolean stop() {
try {
if (future != null) {
future.cancel(true);
}
return true;
} catch (Exception e) {
return false;
}
}
}
KeyboardTask.java(虚拟键盘任务)
import com.dm.conf.DmConfig;
import com.dm.conf.TaskConfig;
import com.jacob.com.Dispatch;
public class KeyboardTask extends Thread {
/** * 虚拟键码(键盘) */
private final String[] vk_code;
/** * 大漠插件配置 */
private final DmConfig config;
public KeyboardTask(DmConfig dmConfig, TaskConfig taskConfig) {
this.config = dmConfig;
this.vk_code = taskConfig.getVk_codes();
this.bindWindow(taskConfig.getProcess());
}
@Override public void run() {
for (String item : vk_code) {
Dispatch.call(config.getDm(), "KeyDown", Integer.parseInt(item));
Dispatch.call(config.getDm(), "KeyUp", Integer.parseInt(item));
}
}
public void bindWindow(String process_name) {
int hwnd = Dispatch.call(config.getDm(), "FindWindowByProcess", process_name, "", "").getInt();
Dispatch.call(config.getDm(), "BindWindow", hwnd, "normal", "windows", "windows", 0);
System.out.println("正在绑定窗口:" + process_name);
System.out.println("请输入有效指令:\n启动脚本:1\n结束脚本:0");
}
}
DroneApplication.java(启动入口)
import com.dm.conf.DmConfig;
import com.dm.conf.TaskConfig;
import com.dm.serv.TimerService;
import com.dm.task.KeyboardTask;
import java.util.Scanner;
public class DroneApplication {
public static void main(String[] args) {
DmConfig dmConfig = new DmConfig();
TaskConfig taskConfig = new TaskConfig();
KeyboardTask task = new KeyboardTask(dmConfig, taskConfig);
TimerService timerService = new TimerService();
Scanner scanner = new Scanner(System.in);
while (true) {
try {
if (scanner.hasNextLine()) {
String str = scanner.nextLine();
if (str.equals("1")) {
boolean done = timerService.start(task, taskConfig.getDelay());
if (done) System.out.println("脚本开始启动...");
continue;
}
if (str.equals("0")) {
boolean done = timerService.stop();
if (done) System.out.println("脚本结束退出...");
continue;
}
System.out.println("请输入有效指令:\n启动脚本:1\n结束脚本:0");
}
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}
config.properties(配置文件)
# 大漠注册码
license=(自己去付费,我的不告诉你)
# 进程名称
process=cmd.exe
# 键盘虚拟码
vk_codes=68,69
# 按键间隔时间
interval=2000
注意:windows 模式的键盘虚拟码自己百度,这里举例映射:68='d', 69='e'
。
6. 运行效果展示(idea 管理员模式运行)
Maven 项目请读者自定打包然后配置使用,打包结果很小大约 7KB,这里直接 idea 里跑下效果:
启动项目
输入脚本启动指令
后台窗口自动信号
输入脚本结束指令
总结:其实 Java 语言并不适合做脚本,安装跨平台运行环境等太重,对于电脑萌新不友好,如果读者有别的脚本语言基础,可以尝试把这个代码翻译过去使用。
今天的文章Java 使用大漠插件 制作游戏后台脚本分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14726.html