- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我可以编写一个 java 程序来自动化鼠标移动和点击吗??
就像,然后我将能够运行该程序,它会像有人在控制机器一样工作..
我知道 Robot 类。这将是一个解决方案。欢迎任何想法...
最佳答案
又是你。java.awt.Robot 是解决方案。自己试试。它易于使用。您可以自动化鼠标和键盘。
这是一个这样的类,它演示了 Robot 类的用法。我很久以前就写过了。我正在发布完整的代码。自己试试吧..
package MyRobot;
import java.awt.Color;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MyRobot {
Robot MYROBOT;
Color SCREEN[][];
int SCREEN_X;
int SCREEN_Y;
int WINDOW_X;
int WINDOW_Y;
int TYPE_DELAY = 0;
int MOUSE_DELAY = 0;
int SKILL = 0;
int X, Y;
int lastX, lastY;
int savedX, savedY;
int RED, GREEN, BLUE;
Color PIX_CLOSE_ACTIVE_OFF_MOUSE;
Color PIX_CLOSE_ACTIVE_ON_MOUSE;
HashMap<Character, Integer> KEYMAP;
ArrayList<Integer> randKeys;
GraphicsEnvironment grEnv;
GraphicsDevice grDevice;
JPanel drawPanel;
BufferedImage bufImg;
Rectangle rect;
public static void main(String[] args) {
new MyRobot().go();
}
void go() {
initialize();
gotoxy(100, 100);
}
void initialize() {
grEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
grDevice = grEnv.getDefaultScreenDevice();
updateScreenInfo();
setKeyMap();
try {
MYROBOT = new Robot();
} catch (Exception e) {
JOptionPane.showOptionDialog(null, "Can't build the robot!", "Error", -1, 1, null, null, this);
System.exit(1);
}
X = SCREEN_X / 2;
Y = SCREEN_Y / 2;
//MYROBOT.mouseMove(X, Y);
PIX_CLOSE_ACTIVE_OFF_MOUSE = new Color(184, 67, 44);
PIX_CLOSE_ACTIVE_ON_MOUSE = new Color(210, 35, 2);
}
void updateScreenInfo() {
SCREEN_X = grDevice.getDisplayMode().getWidth();
SCREEN_Y = grDevice.getDisplayMode().getHeight();
WINDOW_X = grEnv.getMaximumWindowBounds().width;
WINDOW_Y = grEnv.getMaximumWindowBounds().height;
}
void setKeyMap() {
KEYMAP = new HashMap<Character, Integer>();
KEYMAP.put('q', 81);
KEYMAP.put('w', 87);
KEYMAP.put('e', 69);
KEYMAP.put('r', 82);
KEYMAP.put('t', 84);
KEYMAP.put('y', 89);
KEYMAP.put('u', 85);
KEYMAP.put('i', 73);
KEYMAP.put('o', 79);
KEYMAP.put('p', 80);
KEYMAP.put('a', 65);
KEYMAP.put('s', 83);
KEYMAP.put('d', 68);
KEYMAP.put('f', 70);
KEYMAP.put('g', 71);
KEYMAP.put('h', 72);
KEYMAP.put('j', 74);
KEYMAP.put('k', 75);
KEYMAP.put('l', 76);
KEYMAP.put('z', 90);
KEYMAP.put('x', 88);
KEYMAP.put('c', 67);
KEYMAP.put('v', 86);
KEYMAP.put('b', 66);
KEYMAP.put('n', 78);
KEYMAP.put('m', 77);
KEYMAP.put('1', 49);
KEYMAP.put('2', 50);
KEYMAP.put('3', 51);
KEYMAP.put('4', 52);
KEYMAP.put('5', 53);
KEYMAP.put('6', 54);
KEYMAP.put('7', 55);
KEYMAP.put('8', 56);
KEYMAP.put('9', 57);
KEYMAP.put('0', 48);
KEYMAP.put(' ', 32);
randKeys = new ArrayList<Integer>();
for (int j = 44; j < 94; j++) {
randKeys.add(j);
}
randKeys.remove(randKeys.indexOf(58));
randKeys.remove(randKeys.indexOf(60));
randKeys.remove(randKeys.indexOf(62));
randKeys.remove(randKeys.indexOf(63));
randKeys.remove(randKeys.indexOf(64));
}
void typeHuman(String letters) {
MYROBOT.setAutoDelay(TYPE_DELAY);
char[] letter = letters.toCharArray();
for (int i = 0; i < letter.length; i++) {
System.out.print(letter[i]);
try {
if ((int) (Math.random() * SKILL) == (int) (Math.random() * SKILL) / 2) {
int limit = (int) ((Math.random() * 3) + 1);
for (int j = 0; j < limit; j++) {
int k = (int) (Math.random() * (randKeys.size() - 1));
manuPress(randKeys.get(k));
}
sleep(200);
for (int j = 0; j < limit; j++) {
backspace();
}
}
if ((Character.isLowerCase(letter[i])) || (Character.isDigit(letter[i]))) {
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
} else {
letter[i] = Character.toLowerCase(letter[i]);
MYROBOT.keyPress(16);
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(16);
}
} catch (Exception e) {
switch (letter[i]) {
case '!': {
manuPressSHIFTED(49);
break;
}
case '@': {
manuPressSHIFTED(50);
break;
}
case '#': {
manuPressSHIFTED(51);
break;
}
case '$': {
manuPressSHIFTED(52);
break;
}
case '%': {
manuPressSHIFTED(53);
break;
}
case '^': {
manuPressSHIFTED(54);
break;
}
case '&': {
manuPressSHIFTED(55);
break;
}
case '*': {
manuPressSHIFTED(56);
break;
}
case '(': {
manuPressSHIFTED(57);
break;
}
case ')': {
manuPressSHIFTED(48);
break;
}
case '?': {
manuPressSHIFTED(47);
break;
}
case '/': {
manuPress(47);
break;
}
case ':': {
manuPressSHIFTED(59);
break;
}
case ';': {
manuPress(59);
break;
}
case '.': {
manuPress(46);
break;
}
case ',': {
manuPress(44);
break;
}
case '"': {
manuPressSHIFTED(222);
break;
}
case '\'': {
manuPress(222);
break;
}
case '[': {
manuPress(91);
break;
}
case ']': {
manuPress(93);
break;
}
case '{': {
manuPressSHIFTED(91);
break;
}
case '}': {
manuPressSHIFTED(93);
break;
}
case '\\': {
manuPress(92);
break;
}
case '|': {
manuPressSHIFTED(92);
break;
}
case '=': {
manuPressSHIFTED(61);
break;
}
case '+': {
manuPressSHIFTED(61);
break;
}
case '-': {
manuPress(45);
break;
}
case '_': {
manuPressSHIFTED(45);
break;
}
case '`': {
manuPress(192);
break;
}
case '~': {
manuPressSHIFTED(192);
break;
}
case '<': {
manuPressSHIFTED(44);
break;
}
case '>': {
manuPressSHIFTED(46);
break;
}
}
}
}
System.out.println("");
}
void type(String letters) {
MYROBOT.setAutoDelay(TYPE_DELAY);
char[] letter = letters.toCharArray();
for (int i = 0; i < letter.length; i++) {
System.out.print(letter[i]);
try {
if ((Character.isLowerCase(letter[i])) || (Character.isDigit(letter[i]))) {
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
} else {
letter[i] = Character.toLowerCase(letter[i]);
MYROBOT.keyPress(16);
MYROBOT.keyPress(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(KEYMAP.get(letter[i]));
MYROBOT.keyRelease(16);
}
} catch (Exception e) {
switch (letter[i]) {
case '!': {
manuPressSHIFTED(49);
break;
}
case '@': {
manuPressSHIFTED(50);
break;
}
case '#': {
manuPressSHIFTED(51);
break;
}
case '$': {
manuPressSHIFTED(52);
break;
}
case '%': {
manuPressSHIFTED(53);
break;
}
case '^': {
manuPressSHIFTED(54);
break;
}
case '&': {
manuPressSHIFTED(55);
break;
}
case '*': {
manuPressSHIFTED(56);
break;
}
case '(': {
manuPressSHIFTED(57);
break;
}
case ')': {
manuPressSHIFTED(48);
break;
}
case '?': {
manuPressSHIFTED(47);
break;
}
case '/': {
manuPress(47);
break;
}
case ':': {
manuPressSHIFTED(59);
break;
}
case ';': {
manuPress(59);
break;
}
case '.': {
manuPress(46);
break;
}
case ',': {
manuPress(44);
break;
}
case '"': {
manuPressSHIFTED(222);
break;
}
case '\'': {
manuPress(222);
break;
}
case '[': {
manuPress(91);
break;
}
case ']': {
manuPress(93);
break;
}
case '{': {
manuPressSHIFTED(91);
break;
}
case '}': {
manuPressSHIFTED(93);
break;
}
case '\\': {
manuPress(92);
break;
}
case '|': {
manuPressSHIFTED(92);
break;
}
case '=': {
manuPressSHIFTED(61);
break;
}
case '+': {
manuPressSHIFTED(61);
break;
}
case '-': {
manuPress(45);
break;
}
case '_': {
manuPressSHIFTED(45);
break;
}
case '`': {
manuPress(192);
break;
}
case '~': {
manuPressSHIFTED(192);
break;
}
case '<': {
manuPressSHIFTED(44);
break;
}
case '>': {
manuPressSHIFTED(46);
break;
}
}
}
}
System.out.println("");
}
void typeln(String letters) {
type(letters);
enter();
}
void typelnHuman(String letters) {
typeHuman(letters);
enter();
}
void getRun() {
MYROBOT.keyPress(524);
MYROBOT.keyPress(82);
MYROBOT.keyRelease(82);
MYROBOT.keyRelease(524);
sleep(500);
}
void combinePress(int keyOne, int keyTwo) {
MYROBOT.keyPress(keyOne);
MYROBOT.keyPress(keyTwo);
MYROBOT.keyRelease(keyTwo);
MYROBOT.keyRelease(keyOne);
}
void combinePress(int keyOne, int keyTwo, int keyThree) {
MYROBOT.keyPress(keyOne);
MYROBOT.keyPress(keyTwo);
MYROBOT.keyPress(keyThree);
MYROBOT.keyRelease(keyThree);
MYROBOT.keyRelease(keyTwo);
MYROBOT.keyRelease(keyOne);
}
void altTab() {
MYROBOT.keyPress(18);
MYROBOT.keyPress(9);
MYROBOT.keyRelease(9);
MYROBOT.keyRelease(18);
}
void winD() {
MYROBOT.keyPress(524);
MYROBOT.keyPress(68);
MYROBOT.keyRelease(68);
MYROBOT.keyRelease(524);
}
void altF4() {
MYROBOT.keyPress(18);
MYROBOT.keyPress(115);
MYROBOT.keyRelease(115);
MYROBOT.keyRelease(18);
}
void enter() {
MYROBOT.keyPress(10);
MYROBOT.keyRelease(10);
}
void backspace() {
MYROBOT.keyPress(8);
MYROBOT.keyRelease(8);
}
void sleep(long duration) {
try {
Thread.sleep(duration);
} catch (Exception e) {
}
}
void click() {
MYROBOT.mousePress(16);
MYROBOT.mouseRelease(16);
}
void doubleClick() {
click();
click();
}
void clickNhold(boolean tof) {
if (tof) {
MYROBOT.mousePress(16);
} else {
MYROBOT.mouseRelease(16);
}
}
void rightClick() {
MYROBOT.mousePress(4);
MYROBOT.mouseRelease(4);
}
void rightclickHold(boolean tof) {
if (tof) {
MYROBOT.mousePress(4);
} else {
MYROBOT.mouseRelease(4);
}
}
void middleClick() {
MYROBOT.mousePress(8);
MYROBOT.mouseRelease(8);
}
void manuPress(int code) {
MYROBOT.keyRelease(16);
MYROBOT.keyPress(code);
MYROBOT.keyRelease(code);
}
void manuPressSHIFTED(int code) {
MYROBOT.keyPress(16);
MYROBOT.keyPress(code);
MYROBOT.keyRelease(code);
MYROBOT.keyRelease(16);
}
void gotoxy(int goX, int goY) {
lastX = X;
lastY = Y;
MYROBOT.setAutoDelay(MOUSE_DELAY);
int initX = X;
int initY = Y;
if (goX == X) {
if (goY > Y) {
for (int i = Y; i <= goY; i++) {
Y = i;
MYROBOT.mouseMove(X, Y);
}
} else {
for (int i = Y; i >= goY; i--) {
Y = i;
MYROBOT.mouseMove(X, Y);
}
}
} else if (goX > X) {
for (int i = 0; i <= (goX - initX); i++) {
X = initX + i;
Y = initY + ((i * (goY - initY)) / (goX - initX));
MYROBOT.mouseMove(X, Y);
}
} else {
for (int i = 0; i >= (goX - initX); i--) {
X = initX + i;
Y = initY + ((i * (goY - initY)) / (goX - initX));
MYROBOT.mouseMove(X, Y);
}
}
}
void getRGB(Color pixel) {
RED = pixel.getRed();
GREEN = pixel.getGreen();
BLUE = pixel.getBlue();
System.out.println(RED + "," + GREEN + "," + BLUE);
}
void savePoint() {
savedX = X;
savedY = Y;
}
void captureScreen() {
System.out.println("Capturing...");
SCREEN = new Color[SCREEN_X][SCREEN_Y];
for (int i = 0; i < SCREEN_X; i++) {
for (int j = 0; j < SCREEN_Y / 2; j++) {
SCREEN[i][j] = MYROBOT.getPixelColor(i, j);
}
}
System.out.println("Capturing done");
}
void gotoPixel(Color pixel) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != pixel.getRGB()) {
for (int i = SCREEN_X - 4; i >= 0; i--) {
for (int j = 3; j < SCREEN_Y / 2; j++) {
if ((MYROBOT.getPixelColor(i, j).getRGB() == pixel.getRGB())) {
gotoxy(i, j);
i = -1;
break;
}
}
}
}
if (MYROBOT.getPixelColor(X, Y).getRGB() == pixel.getRGB()) {
while (MYROBOT.getPixelColor(X, Y).getRGB() == pixel.getRGB()) {
gotoxy((X - 1), Y);
}
}
}
void emergeFromPixel(Color pixel) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != pixel.getRGB()) {
for (int i = SCREEN_X - 4; i >= 0; i--) {
for (int j = 3; j < SCREEN_Y / 2; j++) {
if ((MYROBOT.getPixelColor(i, j).getRGB() == pixel.getRGB())) {
MYROBOT.mouseMove(i, j);
X = i;
Y = j;
i = -1;
break;
}
}
}
}
}
void shift(char dir) {
int initX = X;
Color initPixel;
dir = Character.toUpperCase(dir);
switch (dir) {
case 'L': {
gotoxy((X - 8), Y);
initPixel = MYROBOT.getPixelColor(X, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X - 1), Y);
}
initX = X;
for (int i = initX; i > initX - 20; i--) {
if (MYROBOT.getPixelColor(i, Y).getRGB() == initPixel.getRGB()) {
gotoxy(i, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X - 1), Y);
}
break;
}
}
break;
}
case 'R': {
initPixel = MYROBOT.getPixelColor(X, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X + 1), Y);
}
initX = X;
for (int i = initX; i < initX + 20; i++) {
if (MYROBOT.getPixelColor(i, Y).getRGB() == initPixel.getRGB()) {
gotoxy(i, Y);
while (MYROBOT.getPixelColor(X, Y).getRGB() == initPixel.getRGB()) {
gotoxy((X + 1), Y);
}
break;
}
}
gotoxy((X + 8), Y);
break;
}
}
}
void emergeFromButton(String butName) {
int tempDelay = TYPE_DELAY;
TYPE_DELAY = 0;
MYROBOT.setAutoDelay(TYPE_DELAY);
butName = butName.toUpperCase();
if (butName.equals("CLOSE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
} else if (butName.equals("MAXIMIZE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
} else if (butName.equals("MINIMIZE")) {
emergeFromPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
shift('L');
} else if (butName.equals("START")) {
MYROBOT.mouseMove(20, SCREEN_Y - 10);
}
TYPE_DELAY = tempDelay;
MYROBOT.setAutoDelay(TYPE_DELAY);
}
void gotoButton(String butName) {
butName = butName.toUpperCase();
if (butName.equals("CLOSE")) {
if (MYROBOT.getPixelColor(X, Y).getRGB() != PIX_CLOSE_ACTIVE_ON_MOUSE.getRGB()) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
}
} else if (butName.equals("MAXIMIZE")) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
} else if (butName.equals("MINIMIZE")) {
gotoPixel(PIX_CLOSE_ACTIVE_OFF_MOUSE);
shift('L');
shift('L');
} else if (butName.equals("START")) {
gotoxy(20, SCREEN_Y - 10);
}
}
void catchTitleBar() {
gotoButton("CLOSE");
gotoxy(X - 150, Y);
}
void pressKey(String keyName) {
keyName = keyName.toUpperCase();
if (keyName.equals("ESC")) {
manuPress(27);
}
}
void closeAllWindows() {
while ((MYROBOT.getPixelColor(65, SCREEN_Y - 35).getRed() > 213) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getGreen() > 220) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getBlue() > 228)) {
altTab();
gotoButton("CLOSE");
sleep(100);
click();
sleep(50);
}
}
void quickCloseAllWindows() {
while ((MYROBOT.getPixelColor(65, SCREEN_Y - 35).getRed() > 213) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getGreen() > 220) && (MYROBOT.getPixelColor(65, SCREEN_Y - 35).getBlue() > 228)) {
winD();
sleep(100);
altTab();
altF4();
type("n");
}
}
void getNotepad() {
int saveDelay = TYPE_DELAY;
TYPE_DELAY = 0;
MYROBOT.setAutoDelay(0);
MYROBOT.keyPress(524);
MYROBOT.keyPress(82);
MYROBOT.keyRelease(82);
MYROBOT.keyRelease(524);
sleep(200);
typeln("notepad");
sleep(500);
TYPE_DELAY = saveDelay;
MYROBOT.setAutoDelay(TYPE_DELAY);
}
void closeActiveWindow() {
gotoButton("CLOSE");
click();
type("n");
}
void openMyComputer() {
gotoxy(50, 50);
doubleClick();
}
void lockMouse() {
Thread lockMouse = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
MYROBOT.mouseMove(X, Y);
sleep(100);
}
}
});
lockMouse.start();
}
你欠我的……
关于java - 如何自动化鼠标和键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11627272/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!