尝试用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让程序知道他该工作了。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值