java--robot类--脚本实现

介绍

类介绍

Robot类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。

该类位于 java.awt.Robot

使用场景

一些机械化脚本

类方法

构造方法

Robot()  //在主屏幕的坐标系中构造机器人对象

Robot(GraphicsDevice screen) // 为给定的屏幕设备创建一个机器人。传递给机器人方法
//调用(如mouseMove,getPixelColor和createScreenCapture)的坐标将被解释为与指
//定屏幕位于同一坐标系中。请注意,根据平台配置,多个屏幕可能:
//共享相同的坐标系以形成组合的虚拟屏幕
//使用不同的坐标系充当独立的屏幕
//如果重新配置屏幕设备以影响坐标系,则未定义现有机器人对象的行为。

鼠标

void mouseMove(int x, int y) //将鼠标指针移动到给定的屏幕坐标
void mousePress(int buttons) //按下一个或多个鼠标按钮。
void mouseRelease(int buttons) // 释放一个或多个鼠标按钮。
void mouseWheel(int wheelAmt)  // 在配备滚轮的鼠标上旋转滚轮

mousePress

按键参数通过mouseEvent或者inputEvent中枚举表示。

按下后记得松开

mouseWheel参数说明

移动鼠标滚轮的“凹口”数量负值表示向上/远离用户,正值表示向下/朝向用户移动。

键盘

void keyPress(int keycode) // 按下keycode
void keyRelease(int keycode) // 松开keycode

keyPress(int keycode)说明

按下keycode按键
实现同时按下就按顺序写不松开就行。
注意:实现游戏脚本的时候,想要随机时间来按键和松开比较好,不然的话,容易被检测出来。

按键可以通过KeyEvent的枚举来表示

屏幕

Color getPixelColor(int x, int y) // 获取指定像素点的颜色
BufferedImage createScreenCapture(Rectangle screenRect)
MultiResolutionImage createMultiResolutionScreenCapture(Rectangle screenRect) 

getPixelColor注意

获取x,y像素点的颜色,不过因为很多电脑又缩放,所以一般会需要转换一下

实例

抖音

这个例子用于实现,抖音进度条到最后后自动下一个视频,不过呢,我试了一下不是特别实用,因为进度条的颜色会因为视频的颜色原因有所变化,不是一模一样的。这里这是作为我的一个练习。

这里想要获取坐标和颜色rgb我用的是powertoys这个工具箱完成的

	public void douyin(){
        try {
            Robot r = new Robot();
            while (true){
                Color color = r.getPixelColor(getW(1450), getW(967)); // 获取进度条最后位置的颜色
//                r.mouseMove(getW(1450), getW(967));  测试移动点
                if (color.getRGB() > -7500000 && color.getRGB() < -6800000) {// 颜色如果为已加载颜色则下一个视频
                    r.mouseWheel(100);// 鼠标下滑
                    demo(color);// 打印颜色
                }
                r.delay(2000);// 每2s监视一次
            }
        } catch (AWTException e) {
            throw new RuntimeException(e);
        }

    }
    //打印颜色
    private static void demo(Color c) {
        System.out.println(c.getRGB());
        System.out.println(c.getRed());
        System.out.println(c.getGreen());
        System.out.println(c.getBlue());
    }

	// 因为我的电脑有着125%的缩放,所以想要改回去
    public static int getW(int x){
        return (int) (x/1.25);
    }

封装工具类

输出字符串

我没有寻找到java能够向光标位置输出的方法,这里借助粘贴板完成
这里代码借助了后面按下多个按钮的工具类

    public static void keyPressString(Robot r ,String str){
        //获取剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        //将传入字符串封装下
        Transferable tText = new StringSelection(str);
        //将字符串放入剪切板
        clip.setContents(tText, null);
        //按下Ctrl+V实现粘贴文本
        keyPressN(r,KeyEvent.VK_CONTROL,KeyEvent.VK_V);
        r.delay(100);
    }

一下按下去一个键

public static void keyPressOne(Robot r,int keyCode){
        r.keyPress(keyCode);
        r.keyRelease(keyCode);
        r.delay(100);
    }

按下去多个键

public static void keyPressN(Robot r,int... keyCode){
        for (int i : keyCode) {
            r.keyPress(i);
        }
        for (int i : keyCode) {
            r.keyRelease(i);
        }
    }
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中Robot类详解 概述 概述 Java中Robot类位于java.awt.Robot,该类⽤于为测试⾃动化,⾃运⾏演⽰程序和其他需要控制⿏标和键盘的应⽤程序⽣成本机系统输⼊ 事件,Robot类的主要⽬的是便于Java平台实现⾃动测试。 Robot可以模拟⿏标和键盘的输⼊,相当于Java版的按键精灵。 常⽤⽅法 常⽤⽅法 1.创建实例 Robot robot = new Robot(); 2.延时函数 robot.delay(毫秒值); 3.⿏标按下 robot.mousePress(⿏标上的按键); //⿏标左键:InputEvent.BUTTON1_DOWN_MASK //⿏标中键:InputEvent.BUTTON2_DOWN_MASK //⿏标右键:InputEvent.BUTTON3_DOWN_MASK 4.⿏标释放 robot.mouseRelease(⿏标上的按键); //⿏标左键:InputEvent.BUTTON1_DOWN_MASK //⿏标中键:InputEvent.BUTTON2_DOWN_MASK //⿏标右键:InputEvent.BUTTON3_DOWN_MASK 5.⿏标移动 //⿏标移动到指定位置 robot.mouseMove(int x,int y); 6.⿏标滚轮滑动 //⿏标滚动(参数⼩于0,表⽰向上滚动;参数⼤于0,表⽰向下滚动) robot.mouseWheel(int wheelAmt); 7.键盘按下指定的键 //键盘按下指定的键-----keycode:键盘键值常量,定义在KeyEvent.VK_XXX 中 //KeyEvent.VK_WINDOWS:键盘上的windows键 //KeyEvent.VK_CONTROL:键盘上的ctrl键 //KeyEvent.VK_L:键盘上的L键 robot.keyPress(int keycode); 8.键盘释放指定的键 //键盘按下指定的键-----keycode:键盘键值常量,定义在KeyEvent.VK_XXX 中 //KeyEvent.VK_WINDOWS:键盘上的windows键 //KeyEvent.VK_CONTROL:键盘上的ctrl键 //KeyEvent.VK_L:键盘上的L键 robot.keyRelease(int keycode); 9.获取屏幕指定坐标处像素颜⾊ //获取指定坐标处的像素颜⾊ Color color=robot.getPixelColor(int x,int y); 10.截取指定区域的图像(截图功能) //获取指定矩形区域的图像(截图) BufferedImage bufferedimage=robot.createScreenCapture(Rectangle screenRect); ⽰例:截取指定矩形区域的图像,并保存到指定的路径 public static void main(String[] args) throws AWTException, IOException { Robot robot=new Robot(); //获取指定矩形区域的屏幕图像 BufferedImage bufferedImage=robot.createScreenCapture(new Rectangle(100,100,500,500)); File f=new File("D:\\save.jpg"); OutputStream os=new FileOutputStream(f); ImageIO.write(bufferedImage, "jpg", os); } ⽰例:在指定区域⾃动输⼊指定字符 robot.mouseMove(342, 626); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); robot.delay(500); robot.keyPress(KeyEvent.VK_L); robot.keyRelease(KeyEvent.VK_L); robot.delay(500); robot.keyPress(KeyEvent.VK_O); robot.keyRelease(KeyEvent.VK_O); robot.delay(500); robot.keyPress(KeyEvent.VK_V); robot.keyRelease(KeyEvent.VK_V); robot.delay(500); robot.keyPress(KeyEvent.VK_E); robot.keyRelease(KeyEvent.VK_E)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值