栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

尝试用java的robot类写一个小程序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试用java的robot类写一个小程序

今日目标熟悉robot的基本方法 控制键盘
        Robot robot = new Robot();
        //唤醒微信
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_W);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_W);
        robot.delay(2000);
控制鼠标
//鼠标移动
        robot.mouseMove(0,0);
        robot.delay(1000);
        robot.mouseMove(1690,1090);
        robot.mouseMove(900,780);
//鼠标点击
        robot.delay(1000);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.delay(3000);

(看到这里你会发现KeyEvent和InputEvent无法理解,就是两个代表某个操作的参数)

获取颜色
        //获取颜色,似乎只能获取桌面上的尽管有覆盖
        robot.mouseMove(950,500);
        robot.delay(3000);
        Color pixelColor = robot.getPixelColor(950, 500);
        int red = pixelColor.getRed();
        int green = pixelColor.getGreen();
        int blue = pixelColor.getBlue();
        System.out.print(red+","+green+","+blue);
截图
        //获取屏幕截屏
        Dimension ssize = Toolkit.getDefaultToolkit().getScreenSize();
        boolean flage = false;
        //为什么这里要写在外面——》提升变量覆盖的范围
       // 默认要初始化
        int height = ssize.height;
        int width = ssize.width;
        System.out.print(height+","+width);
        Rectangle rectangle = new Rectangle(ssize);
        String path="/Users/lihao/Downloads";
        String name="picturetest";
        BufferedImage b = robot.createScreenCapture(rectangle);
        File file = new File(path, name);
        try {
            flage = ImageIO.write(b, "png", file);
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(flage){
            //File.separator系统分隔符
            path=path+File.separator+name;
        }
        System.out.print(path);

java程序中注册系统级热键 Jintellitype:所谓系统级热键就是指一组快捷键,不论当前系统焦点在哪个程序中,只要按下该键,程序就能够捕捉该事件并进行相关处理。
这个基础知识可以用来做一些微操,比如强行停止,一键开始等。看后面有没有用。

Jintellitype的使用:
第一步:添加jar包和dll文件;
第二步:注册热键;
第三步:添加热键监听器,实现接口的方法;

以上就是基本应用。基本工具有了,然后就是思路。我要实现一个自动脚本。先初始化一个固定大小的方框节省空间,然后传入robot的createScreenCapture类中获取截图,根据截图的情况再进行对应的鼠标键盘操作。我对java了解的甚微,我直觉robot有点人工智能的感觉。

思路

获取按键位置
我想第一个要解决的是控制鼠标点该点的地方,总不可能记录每个按键的坐标,这样做太死板了,而且位置改了点就不能用了,从别人的博客吸取到的思路从一个大图片中找到小图片并且返回中心坐标的这个思路。

获取截图
截图应该怎么获取,是先截图下来再进行对比还是游戏打开后自动截图识别。目前先试着实现第一种,即截图对应的画面,然后当游戏打开后再运行程序,对游戏和画面进行对比然后获取按键位置。如何进行对比又是一个难题。 毕竟存在这样一个问题,游戏时刻都在变化,如果使用像素和图片完整一一对应的话,万一突然有个消息图片和游戏就不一样了,这样程序就没法用了;然后还可以这样,只取图片和游戏的一小片段进行对比。然后的问题上是程序怎么知道当前游戏处于什么状态。我可以让人来进行判断,这个时候热键的功能就来了,当游戏处于我们想要的界面后,利用Jintellitype让程序知道他该工作了。

目前思路就这么多,然后明天再进行实战。具体应该还会出现各种各样的问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号