这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
骚操作
疫情期间很多公司开始远程办公,但是远程办公后如何获取员工的活跃度(看看是不是在划水),
很多公司已经开始使用云操作系统,或者安装了一些安全监控软件,可能会检测鼠标、键盘等等的活跃度,
这事,我们该如何合理的工作(摸鱼),又不被检测出来活跃度不够呢?
当然你可以使用鼠标精灵等软件,本文介绍一种Java的实现方案。
简介
Robot类用于模拟鼠标、键盘事件,生成本机系统输入事件。
Robot 的主要用于自动化、自运行的程序和其他需要自动控制鼠标和键盘的程序
相当于实际操作的效果,不仅仅只是生成对应的鼠标、键盘事件。 比如Robot.mouseMove() 将实际移动鼠标光标,而不是只生成鼠标移动事件。
实现的是本机的全局模拟,不仅仅局限于写的程序和IDE
常用方法
方法 | 含义 |
---|---|
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) | 滚动鼠标滑轮 |
小栗子
1、自动编码
了解了常用方法后,就能够快速想到用这些方法实现自动写代码功能
下面简单模拟实现控制台打印
- 调用IDEA输出快捷键sout
- 回车后实现完整输出System.out.println();
- 在输出位置写入2-1
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、画图
其实画图也就是用画图中的工具,然后模拟鼠标拖拽动作,主要分为如下几步
- 打开画图软件
- 选中椭圆
- 运行程序
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,否则因为计算机执行速度太快,看不到动态作图的过程
}
最终效果:
小结
Java中Robot类不是很常用,却是很有用的一个类,能实现一些很有意思的功能,看了上面栗子你可能会问为什么不模拟输出”Hello word”呢,这是因为我不会用KeyEvent输出双引号“”,你可以试试,如果可以评论@我。
今天的文章Java隐藏技-自动化机器人分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23302.html