IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 尝试用java的robot类写一个小程序 -> 正文阅读

[移动开发]尝试用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让程序知道他该工作了。

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:01:03  更:2022-01-24 11:01:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:06:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码