java实现自动化工具
Posted cheng2839
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现自动化工具相关的知识,希望对你有一定的参考价值。
各位读者,大家好!
下来我给大家带来我珍藏多年的珍品。
java自动化工具类,包含鼠标单击、双击、右击、按键、组合按键、剪贴板、提示框、提示音、截屏、屏幕大小、坐标等等。
基本上涵盖了所有的人为行为,比如用这个工具我们可以实现自动化定时截屏、自动化发送消息等等。
想想是不是很炫,哈哈哈。作为一个程序?,在很短时间内就可以实现大量重复的工作,比如生成代码、填写报文等等繁琐又无趣的事情。
接下来就给大家奉献工具源码MKAutoKit:
1 package com.cheng2839.utils; 2 3 import com.clb.util.auto.Logger; 4 5 import javax.imageio.ImageIO; 6 import javax.swing.*; 7 import java.awt.*; 8 import java.awt.datatransfer.Clipboard; 9 import java.awt.datatransfer.DataFlavor; 10 import java.awt.datatransfer.StringSelection; 11 import java.awt.datatransfer.Transferable; 12 import java.awt.datatransfer.UnsupportedFlavorException; 13 import java.awt.image.BufferedImage; 14 import java.io.File; 15 import java.io.IOException; 16 17 /** 18 * 自动化工具:自动操作鼠标、键盘等 19 * 包含鼠标单击、双击、右击、按键、组合按键、剪贴板、提示框、提示音、截屏、屏幕大小、坐标等等。 20 * @author cheng2839 21 * @2018年11月16日 22 */ 23 public class MKAutoKit { 24 private static Robot robot = null; 25 26 static 27 { 28 try 29 { 30 robot = new Robot(); 31 } catch (AWTException e) { 32 e.printStackTrace(); 33 } 34 } 35 36 /** 37 * 点击 38 * @param x 39 * @param y 40 * @author cheng2839 41 * @2018年11月16日 42 */ 43 public static void leftClick(int x, int y) 44 { 45 robot.mouseMove(x, y); 46 robot.mousePress(16); 47 sleep(10L); 48 robot.mouseRelease(16); 49 } 50 51 /** 52 * 右击 53 * @param x 54 * @param y 55 * @author cheng2839 56 * @2018年11月16日 57 */ 58 public static void rightClick(int x, int y) 59 { 60 robot.mouseMove(x, y); 61 robot.mousePress(8); 62 sleep(10L); 63 robot.mouseRelease(8); 64 } 65 66 /** 67 * 按键 68 * @param keyCode 69 * @author cheng2839 70 * @2018年11月16日 71 */ 72 public static void key(int keyCode) 73 { 74 robot.keyPress(keyCode); 75 sleep(10L); 76 robot.keyRelease(keyCode); 77 } 78 79 /** 80 * 组合按键 81 * @param keyCodes 82 * @author cheng2839 83 * @2018年11月16日 84 */ 85 public static void keys(int[] keyCodes) 86 { 87 for (int i = 0; i < keyCodes.length; i++) { 88 robot.keyPress(keyCodes[i]); 89 } 90 sleep(10L); 91 for (int i = keyCodes.length - 1; i >= 0; i--) { 92 robot.keyRelease(keyCodes[i]); 93 } 94 } 95 96 /** 97 * 获取当前鼠标的坐标 98 * @return 99 * @author cheng2839 100 * @2018年11月16日 101 */ 102 public static Point x_y() 103 { 104 return MouseInfo.getPointerInfo().getLocation(); 105 } 106 107 /** 108 * 获取剪贴板内容 109 * @return 110 * @author cheng2839 111 * @2018年11月16日 112 */ 113 public static String getClipboard() 114 { 115 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 116 Transferable content = clipboard.getContents(null); 117 if (content.isDataFlavorSupported(DataFlavor.stringFlavor)) { 118 try 119 { 120 return (String)content.getTransferData(DataFlavor.stringFlavor); 121 } 122 catch (UnsupportedFlavorException e) 123 { 124 e.printStackTrace(); 125 } 126 catch (IOException e) 127 { 128 e.printStackTrace(); 129 } 130 } 131 return null; 132 } 133 134 /** 135 * 提示音 136 * @author cheng2839 137 * @2018年11月16日 138 */ 139 public static void beep() 140 { 141 Toolkit.getDefaultToolkit().beep(); 142 } 143 144 /** 145 * 设置剪贴板 146 * @param data 147 * @author cheng2839 148 * @2018年11月16日 149 */ 150 public static void setClipboard(String data) 151 { 152 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 153 StringSelection selection = new StringSelection(data); 154 clipboard.setContents(selection, null); 155 } 156 157 /** 158 * 鼠标移动监听 159 * @param mills 160 * @author cheng2839 161 * @2018年11月16日 162 */ 163 public static void mouseMove(long mills) 164 { 165 long time = System.currentTimeMillis(); 166 Point p = x_y(); 167 while (System.currentTimeMillis() - time <= mills) 168 { 169 Point newp = x_y(); 170 if ((newp.x != p.x) || (newp.y != p.y)) { 171 Logger.info("( " + newp.x + ", " + newp.y + " )"); 172 } 173 p = newp; 174 sleep(100L); 175 } 176 } 177 178 179 /** 180 * sleep 181 * @param millis 182 * @author cheng2839 183 * @2018年11月16日 184 */ 185 public static void sleep(long millis) 186 { 187 try 188 { 189 Thread.sleep(millis); 190 } 191 catch (InterruptedException e) 192 { 193 e.printStackTrace(); 194 } 195 } 196 197 /** 198 * 屏幕大小 199 * @return 200 * @author cheng2839 201 * @2018年11月16日 202 */ 203 public static Dimension getScreenSize() 204 { 205 return Toolkit.getDefaultToolkit().getScreenSize(); 206 } 207 208 /** 209 * 弹框提示 210 * @param message 211 * @author cheng2839 212 * @2018年11月16日 213 */ 214 public static void showTip(String message) 215 { 216 JOptionPane.showMessageDialog(null, message, "tip", -1); 217 } 218 219 /** 220 * 截取全屏并保存为图片 221 * @param imgPath 222 * @return 223 * @author cheng2839 224 * @2018年11月16日 225 */ 226 public static File getScreenImg(String imgPath) 227 { 228 BufferedImage image = robot.createScreenCapture(new Rectangle(getScreenSize())); 229 try 230 { 231 File imgFile = new File(imgPath); 232 ImageIO.write(image, "JPG", imgFile); 233 return imgFile; 234 } 235 catch (IOException e) 236 { 237 e.printStackTrace(); 238 } 239 return null; 240 } 241 }
源码归本人所有,如需转载,请标注出处。
我还是忍不住放上了这张图片,万一你想和我说说话呢???
以上是关于java实现自动化工具的主要内容,如果未能解决你的问题,请参考以下文章
solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例
Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示(代码片段
音频处理Melodyne 选择工具使用 ( 主工具简介 | 修改音高 | 自动吸附 | 音符长度修改 | 长度自动吸附 | 设置音符分离线 | 设置片段分离线 )