【java办公自动化(5)】-- springboot2.x模拟打开QQ.exe
需求前言
听说一位同事早上上班,坐下来就打开电脑,打开数据库,打开微信,打开钉钉,打开邮箱,打开服务器,打开IJ,打开word文档,打开Nginx,打开淘宝,打开Redis,打开Ps,打开。。。用时半小时,冲了杯咖啡。。。每天重复这种打开操作,当然你可以不关机或者待机。JAVA中的Robot可以帮你完成这种操作。
这里只教简单的基本操作,登录QQ号,你说QQ不是有自动登录吗,这个只是演示,没必要较真。不会教你游戏自动挂机,咱也不会做,咱也不敢做,反正很牛逼。
自动化给我们带来价值有:
-
机器处理:通过用户界面(UI)或者脚本语言(Script)实现借由机器人的重复人工任务的自动化处理;
-
基于明确的规则操作:流程必须有明确的、可被数字化的触发指令和输入,流程不得出现无法提前定义的例外情况;
-
以外挂的形式部署在客户现有系统上:基于规则在用户界面进行自动化操作,非侵入式模式不影响原有IT基础架构;
-
模拟用户手工操作及交互:机器人可以执行用户的日常基本操作,例如:鼠标点击、键盘输入、复制/粘贴等一系列日常电脑操作。
自动化和AI其实是天壤之别,现在的机器人还只是逻辑编程比较完善能够执行一定预制判断逻辑的的机器,还远谈不上人工智能,列如春晚上机器人自动写春联,这个春联是早已把逻辑编上去的,如果让它写下你自己的新年愿望,它就成了人工智障————短路了。但没关系,我们可以手动智能。
效果展示
代码展示
@Test
public void test() throws AWTException{
//获取机器人类
Robot robot = new Robot();
//获取当前屏幕
Point point = MouseInfo.getPointerInfo().getLocation();
double x = point.getX();//当前鼠标放下x轴
double y = point.getY();//当前鼠标放下y轴
//设置鼠标在屏幕的位置
robot.mouseMove(33,44);
// 模拟鼠标按下左键
robot.mousePress(InputEvent.BUTTON1_MASK);
// 模拟鼠标松开左键
robot.mouseRelease(InputEvent.BUTTON1_MASK);
// 模拟鼠标按下右键
/*robot.mousePress(InputEvent.BUTTON3_MASK);
// 模拟鼠标松开右键
robot.mouseRelease(InputEvent.BUTTON3_MASK);*/
//模拟按下Win键
robot.keyPress(524);
//模拟松开Win键
robot.keyRelease(524);
}
Process p = Runtime.getRuntime().exec("C:\\software\\QQ\\Bin\\QQScLauncher.exe");
p.waitFor();
// 休息5秒钟
Thread.currentThread().sleep(5000);
Robot robot = new Robot();
//设置Robot产生一个动作后的休眠时间,否则执行过快
robot.setAutoDelay(1000);
int start_x = 1;
int start_y = 1;
int end_x = 1080;
int end_y = 840;
for(int i = 0; i <5; i ++){
int x =((end_x * i)/ 5)+(start_x *(100-i)/ 5);
int y =((end_y * i)/ 5)+(start_y *(100-i)/ 5);
robot.mouseMove(x, y);
}
//移动鼠标
// robot.mouseMove(860, 540); //960 700
// 点击鼠标左键
System.out.println("单击");
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
SpringApplicationBuilder builder = new SpringApplicationBuilder(CodeApplication.class);
builder.headless(false).run(args);
难点分析
- headless的bug:在开发时,使用Springboot2.X会报错,需要在启动时候设置headless
- 移动鼠标
程序启动,鼠标初始的位置不是鼠标原来的位置,为了方便查看鼠标移动,使用了for循环,循环鼠标移动的位置,但是移动得很不自然。 - Process :使用这个类,可以做很多操作。
扩展需求
- 1、可以截图,然后图像分析