前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >骚操作-Java机器人

骚操作-Java机器人

作者头像
你呀不牛
发布2022-01-18 15:40:43
6810
发布2022-01-18 15:40:43
举报
文章被收录于专栏:我要变牛我要变牛

1骚操作

疫情期间很多公司开始远程办公,但是远程办公后如何获取员工的活跃度(看看是不是在划水),

很多公司已经开始使用云操作系统,或者安装了一些安全监控软件,可能会检测鼠标、键盘等等的活跃度,

这时我们该如何合理的工作(摸鱼),又不被检测出来活跃度不够呢?

当然你可以使用鼠标精灵等软件,本文介绍一种Java的实现方案。

2简介

Robot类用于模拟鼠标、键盘事件,生成本机系统输入事件。

Robot 的主要用于自动化、自运行的程序和其他需要自动控制鼠标和键盘的程序

相当于实际操作的效果,不仅仅只是生成对应的鼠标、键盘事件。比如Robot.mouseMove() 将实际移动鼠标光标,而不是只生成鼠标移动事件。

实现的是本机的全局模拟,不仅仅局限于写的程序和IDE

3常用方法

方法

含义

void delay (int ms)

睡眠指定的时间(类似于线程中sleep)

void keyPress(int keycode)

按下指定的键

void keyRelease(int keycode)

释放指定的键

void mousePress(int buttons)

按下一个或多个鼠标按键

void mouseRelease(int buttons)

释放一个或多个鼠标按键

void mouseMove(int x,int y)

将鼠标移动到给定的屏幕坐标上

void mouseWheel(int wheelAmt)

滚动鼠标滑轮

4小栗子

1、自动编码

了解了常用方法后,就能够快速想到用这些方法实现自动写代码功能

下面简单模拟实现控制台打印

  • 调用IDEA输出快捷键sout
  • 回车后实现完整输出System.out.println();
  • 在输出位置写入2-1
代码语言:javascript
复制
public static void main(String[] args) throws AWTException {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_S);
    robot.keyRelease(KeyEvent.VK_S);
    robot.keyPress(KeyEvent.VK_O);
    robot.keyRelease(KeyEvent.VK_O);
    robot.keyPress(KeyEvent.VK_U);
    robot.keyRelease(KeyEvent.VK_U);
    robot.delay(100);
    robot.keyPress(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_T);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_2);
    robot.keyRelease(KeyEvent.VK_2);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_MINUS);
    robot.keyRelease(KeyEvent.VK_MINUS);
    robot.delay(500);
    robot.keyPress(KeyEvent.VK_1);
    robot.keyRelease(KeyEvent.VK_1);
}

最终效果:

以上只是简单模拟了键盘写代码操作,更多用途可以自己发掘

2、画图

其实画图也就是用画图中的工具,然后模拟鼠标拖拽动作,主要分为如下几步

  • 打开画图软件
  • 选中椭圆
  • 运行程序
代码语言:javascript
复制
public static void main(String[] args) throws AWTException {
    Robot robot = new Robot(); 
    robot.delay(5000);//等待5秒 5秒后必须打开画图板选中椭圆才可正常运行
   //第一个圆
    int i = 10;
    while (i-- > 0) {
        robot.mouseMove(400, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(650, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(1000);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
    //第二个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(600, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(850, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(1000);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程

    //第三个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(800, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.2s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(1050, 550);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.1s,否则因为计算机执行速度太快,看不到动态作图的过程

    //第四个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(500, 425);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(750, 675);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程

    //第五个圆
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(0, 300);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); //画完一个圆后在圆外面点一下鼠标,否则回拖动画的圆到下一个位置
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(700, 425);
    }
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(100);       //这里延迟0.1s,可以看到动态画的过程
    i = 10;
    while (i-- > 0) {
        robot.mouseMove(950, 675);
    }
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);       //画完一个圆停止0.2s,否则因为计算机执行速度太快,看不到动态作图的过程
}

最终效果:

5小结

Java中Robot类不是很常用,却是很有用的一个类,能实现一些很有意思的功能,看了上面栗子你可能会问为什么不模拟输出"Hello word"呢,这是因为我不会用KeyEvent输出双引号“”,你可以试试

使用go语言的同学可以看下这个开源库,实现的是一样的功能: https://github.com/go-vgo/robotgo

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 你呀不牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1骚操作
  • 2简介
  • 3常用方法
  • 4小栗子
    • 1、自动编码
      • 2、画图
      • 5小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档