使用java自动登录桌面应用程序



我想使用Java自动登录到任何桌面应用程序,如Lotus、Outlook或任何其他需要用户身份验证的应用程序()。

比方说,我想使用Java程序自动登录桌面Skype应用程序,即我们将打开Skype.exe&将提供身份验证详细信息(用户名、密码)作为参数。

在搜索时,我知道我们有一个机器人API,所以我用下面的方式尝试它。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import static java.awt.event.KeyEvent.*;
public class RobotExp {
    Robot robot = new Robot();
    public static void main(String[] args) {
        try {
            // Process process = new ProcessBuilder(
            // "C:\Windows\System32\notepad.exe").start();//C:SmartClientCacheAppsEllie
            // MaeEncompass
            Process process = new ProcessBuilder(
                    "C:\Program Files (x86)\Skype\Phone\Skype.exe").start();
            new RobotExp();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    public RobotExp() throws AWTException {
        robot.delay(1200);
        // robot.keyPress(KeyEvent.VK_TAB);
        // robot.delay(200);
        type("testaccess");
        // robot.setAutoDelay(40);
        // robot.setAutoWaitForIdle(true);
        //
        // robot.delay(4000);
        // robot.mouseMove(40, 130);
        // robot.delay(500);
        //
        robot.keyPress(KeyEvent.VK_TAB);
        type("test@1234");
        // robot.delay(200);
        robot.keyPress(KeyEvent.VK_ENTER);
        // type("wish is your");
        // robot.delay(500);
        // leftClick();
        //
        // robot.delay(500);
        // type("Hello, world");
        //
        // robot.mouseMove(40, 160);
        // robot.delay(500);
        //
        // leftClick();
        // robot.delay(500);
        // leftClick();
        //
        // robot.delay(500);
        // type("This is a test of the Java Robot class");
        //
        // robot.delay(50);
        // type(KeyEvent.VK_DOWN);
        //
        // robot.delay(250);
        // type("Four score and seven years ago, our fathers ...");
        //
        // robot.delay(1000);
        System.exit(0);
    }
    // private void leftClick() {
    // robot.mousePress(InputEvent.BUTTON1_MASK);
    // robot.delay(200);
    // robot.mouseRelease(InputEvent.BUTTON1_MASK);
    // robot.delay(200);
    // }
    // private void rightClick() {
    // robot.mousePress(InputEvent.BUTTON2_MASK);
    // robot.delay(200);
    // robot.mouseRelease(InputEvent.BUTTON2_MASK);
    // robot.delay(200);
    // }
    // private void type(int i) {
    // robot.delay(40);
    // robot.keyPress(i);
    // robot.keyRelease(i);
    // }
    // private void type(String s) {
    // byte[] bytes = s.getBytes();
    // for (byte b : bytes) {
    // int code = b;
    // // keycode only handles [A-Z] (which is ASCII decimal [65-90])
    // if (code > 96 && code < 123)
    // code = code - 32;
    // robot.delay(40);
    // robot.keyPress(code);
    // robot.keyRelease(code);
    // }
    // }
    public void type(CharSequence characters) {
        int length = characters.length();
        for (int i = 0; i < length; i++) {
            char character = characters.charAt(i);
            type(character);
        }
    }
    public void type(char character) {
        switch (character) {
        case 'a':
            doType(VK_A);
            break;
        case 'b':
            doType(VK_B);
            break;
        case 'c':
            doType(VK_C);
            break;
        case 'd':
            doType(VK_D);
            break;
        case 'e':
            doType(VK_E);
            break;
        case 'f':
            doType(VK_F);
            break;
        case 'g':
            doType(VK_G);
            break;
        case 'h':
            doType(VK_H);
            break;
        case 'i':
            doType(VK_I);
            break;
        case 'j':
            doType(VK_J);
            break;
        case 'k':
            doType(VK_K);
            break;
        case 'l':
            doType(VK_L);
            break;
        case 'm':
            doType(VK_M);
            break;
        case 'n':
            doType(VK_N);
            break;
        case 'o':
            doType(VK_O);
            break;
        case 'p':
            doType(VK_P);
            break;
        case 'q':
            doType(VK_Q);
            break;
        case 'r':
            doType(VK_R);
            break;
        case 's':
            doType(VK_S);
            break;
        case 't':
            doType(VK_T);
            break;
        case 'u':
            doType(VK_U);
            break;
        case 'v':
            doType(VK_V);
            break;
        case 'w':
            doType(VK_W);
            break;
        case 'x':
            doType(VK_X);
            break;
        case 'y':
            doType(VK_Y);
            break;
        case 'z':
            doType(VK_Z);
            break;
        case 'A':
            doType(VK_SHIFT, VK_A);
            break;
        case 'B':
            doType(VK_SHIFT, VK_B);
            break;
        case 'C':
            doType(VK_SHIFT, VK_C);
            break;
        case 'D':
            doType(VK_SHIFT, VK_D);
            break;
        case 'E':
            doType(VK_SHIFT, VK_E);
            break;
        case 'F':
            doType(VK_SHIFT, VK_F);
            break;
        case 'G':
            doType(VK_SHIFT, VK_G);
            break;
        case 'H':
            doType(VK_SHIFT, VK_H);
            break;
        case 'I':
            doType(VK_SHIFT, VK_I);
            break;
        case 'J':
            doType(VK_SHIFT, VK_J);
            break;
        case 'K':
            doType(VK_SHIFT, VK_K);
            break;
        case 'L':
            doType(VK_SHIFT, VK_L);
            break;
        case 'M':
            doType(VK_SHIFT, VK_M);
            break;
        case 'N':
            doType(VK_SHIFT, VK_N);
            break;
        case 'O':
            doType(VK_SHIFT, VK_O);
            break;
        case 'P':
            doType(VK_SHIFT, VK_P);
            break;
        case 'Q':
            doType(VK_SHIFT, VK_Q);
            break;
        case 'R':
            doType(VK_SHIFT, VK_R);
            break;
        case 'S':
            doType(VK_SHIFT, VK_S);
            break;
        case 'T':
            doType(VK_SHIFT, VK_T);
            break;
        case 'U':
            doType(VK_SHIFT, VK_U);
            break;
        case 'V':
            doType(VK_SHIFT, VK_V);
            break;
        case 'W':
            doType(VK_SHIFT, VK_W);
            break;
        case 'X':
            doType(VK_SHIFT, VK_X);
            break;
        case 'Y':
            doType(VK_SHIFT, VK_Y);
            break;
        case 'Z':
            doType(VK_SHIFT, VK_Z);
            break;
        case '`':
            doType(VK_BACK_QUOTE);
            break;
        case '0':
            doType(VK_0);
            break;
        case '1':
            doType(VK_1);
            break;
        case '2':
            doType(VK_2);
            break;
        case '3':
            doType(VK_3);
            break;
        case '4':
            doType(VK_4);
            break;
        case '5':
            doType(VK_5);
            break;
        case '6':
            doType(VK_6);
            break;
        case '7':
            doType(VK_7);
            break;
        case '8':
            doType(VK_8);
            break;
        case '9':
            doType(VK_9);
            break;
        case '-':
            doType(VK_MINUS);
            break;
        case '=':
            doType(VK_EQUALS);
            break;
        case '~':
            doType(VK_SHIFT, VK_BACK_QUOTE);
            break;
        case '!':
            doType(VK_EXCLAMATION_MARK);
            break;
        case '@':
            doType(VK_AT);
            break;
        case '#':
            doType(VK_NUMBER_SIGN);
            break;
        case '$':
            doType(VK_DOLLAR);
            break;
        case '%':
            doType(VK_SHIFT, VK_5);
            break;
        case '^':
            doType(VK_CIRCUMFLEX);
            break;
        case '&':
            doType(VK_AMPERSAND);
            break;
        case '*':
            doType(VK_ASTERISK);
            break;
        case '(':
            doType(VK_LEFT_PARENTHESIS);
            break;
        case ')':
            doType(VK_RIGHT_PARENTHESIS);
            break;
        case '_':
            doType(VK_UNDERSCORE);
            break;
        case '+':
            doType(VK_PLUS);
            break;
        case 't':
            doType(VK_TAB);
            break;
        case 'n':
            doType(VK_ENTER);
            break;
        case '[':
            doType(VK_OPEN_BRACKET);
            break;
        case ']':
            doType(VK_CLOSE_BRACKET);
            break;
        case '\':
            doType(VK_BACK_SLASH);
            break;
        case '{':
            doType(VK_SHIFT, VK_OPEN_BRACKET);
            break;
        case '}':
            doType(VK_SHIFT, VK_CLOSE_BRACKET);
            break;
        case '|':
            doType(VK_SHIFT, VK_BACK_SLASH);
            break;
        case ';':
            doType(VK_SEMICOLON);
            break;
        case ':':
            doType(VK_COLON);
            break;
        case ''':
            doType(VK_QUOTE);
            break;
        case '"':
            doType(VK_QUOTEDBL);
            break;
        case ',':
            doType(VK_COMMA);
            break;
        case '<':
            doType(VK_LESS);
            break;
        case '.':
            doType(VK_PERIOD);
            break;
        case '>':
            doType(VK_GREATER);
            break;
        case '/':
            doType(VK_SLASH);
            break;
        case '?':
            doType(VK_SHIFT, VK_SLASH);
            break;
        case ' ':
            doType(VK_SPACE);
            break;
        default:
            throw new IllegalArgumentException("Cannot type character "
                    + character);
        }
    }
    private void doType(int... keyCodes) {
        doType(keyCodes, 0, keyCodes.length);
    }
    private void doType(int[] keyCodes, int offset, int length) {
        if (length == 0) {
            return;
        }
        robot.keyPress(keyCodes[offset]);
        doType(keyCodes, offset + 1, length - 1);
        robot.keyRelease(keyCodes[offset]);
    }
}

但仍然没有取得任何成功。

是否真的可以使自动登录到任何桌面应用程序?

请让我知道是否有任何建议或方法可以实现它?

据我所知,这在Java中是不可能的。每个应用程序都有自己的登录机制,Robot API的主要目的是用于Java平台实现的自动化测试

相关内容

  • 没有找到相关文章

最新更新