【Java】在Java中实现自动化脚本

您所在的位置:网站首页 写java程序用什么软件接单快 【Java】在Java中实现自动化脚本

【Java】在Java中实现自动化脚本

2024-07-15 18:49| 来源: 网络整理| 查看: 265

起因:最近在玩一款手游,日常任务较为机械繁琐,故想利用脚本来自动完成,之前用C++写过一个鼠标脚本精灵,但是功能较单一,所以就没采用,想起来之前在B站看到过有人用Java来写脚本,便也想尝试一下。

主要解决问题

划线为已解决,其余还有待学习研究。

1. Java中模拟鼠标按下抬起操作、模拟键盘按键;

利用Java自带的自动化测试类Robot,包为java.awt.Robot。 Robot中提供了许多用于自动化测试的方法: 可以通过查找API文档,如 API文档-java.awt.Robot; 在这里插入图片描述 如果利用Robot来实现脚本则需要注意一些问题: 模拟鼠标点击不能单单调用mousePress()来实现,应该考虑到人性化,即

一、玩家鼠标点击是包含鼠标按下与鼠标释放两个过程;

Robot bush = new Robot(); bush.mousePress(InputEvent.BUTTON1_DOWN_MASK); bush.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

二、要考虑玩家鼠标点击过程中鼠标按下与释放是有间隔的,一般在0.2~0.4秒之间;

这里利用到Random来实现随机数,即实现每次鼠标点击时按下与释放的间隔不同,从而降低被游戏检测为脚本的风险。

Robot bush = new Robot(); Random random = new Random(); bush.mousePress(InputEvent.BUTTON1_DOWN_MASK); double v = 0.2+random.nextDouble()*(0.4-0.2); //随机0.2~0.4秒间隔 v = v*1000; bush.delay((int)v); bush.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 2. Java获取鼠标指针的屏幕位置;

利用java.awt.MouseInfo类的方法获取,MouseInfo类主要记录了与鼠标状态相关的信息。 在这里插入图片描述

创建一个Point对象来接收表示鼠标当前位置的一个实例;

Point point = java.awt.MouseInfo.getPointerInfo().getLocation(); System.out.println(point.x); System.out.println(point.y); 3. Java捕获鼠标点击事件、键盘按键事件;

为什么会有这个需求呢? 因为脚本中经常会需要录制玩家操作,然后利用脚本重放,这就需要记录鼠标点击的位置、点击间隔时间、键盘是否按下某个按键等信息。

鼠标点击事件 Java中可以利用事件注册监听机制来实现捕获鼠标点击事件,但是捕获仅仅局限于在Java创建的控件区域内的点击事件,即在控件外的点击还无法捕获,或者说对于鼠标点击事件的监听不是全局的。

如下为在某个Java控件中监听鼠标按下事件:

info_frame.addMouseListener(new MyMouseList()); //info_frame为已定义并初始化的控件 } static class MyMouseList extends MouseAdapter { public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); System.out.println(x); System.out.println(y); } }

键盘按键事件 键盘按键事件同理,存在局限,只能监听活动窗口为Java控件时的按键事件;

如下为在某个Java控件中监听按键事件:

bt.addKeyListener(new KeyAdapter() //bt为已定义并初始化的控件 { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ESCAPE) System.exit(0); //组合键 else if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) System.exit(0); else System.out.println(e.getKeyChar()); } }); 4. Java中实现钩子功能;

(即游戏即使后台运行,脚本也能正常运行,而不影响计算机的正常使用)

对于Java中实现钩子功能我还没能找到很好的解决方法,以下转自百度知道:

JAVA是运行在虚拟机上的,而钩子函数是直接对操作系统进行操作控制的,这也是Java和C的主要区别之一,Java要实现钩子函数比较麻烦,需要使用JNI技术,就是Java本地接口,调用C写的钩子函数,所以你还要学会用C写一个钩子函数,然后再用Java的JNI调用C;

从中感觉在Java中实现钩子貌似有点拖拉,有违写脚本便利的初心,所以还是利用其它脚本语言如lua来实现较为便利。

5. Java实现的脚本无法在其它软件、游戏界面内运行;

之前一直以为是脚本的问题,或者是软件/游戏屏蔽了脚本,后面一想,Java就是模拟人工点击,怎么会被检测出来,便上网查了一下资料,原来是管理员权限的问题,解决方法如下:

运行Java程序的开发环境如Eclipse时,右键–以管理员身份运行: 这样子写的Java脚本就可以在其它软件/游戏内进行模拟点击、按键等操作。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3