简体   繁体   English

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

[英]Auto login desktop application using java

I want to autologin to any desktop application like Lotus, Outlook, or any other applications ( who needs user authentication ) using Java. 我想使用Java自动登录到任何桌面应用程序,例如Lotus,Outlook或任何其他需要用户身份验证的应用程序。

Let say I want to auto login to desktop Skype app using Java program ie we will open skype.exe & will provide authentication details(username, password) as parameters. 假设我想使用Java程序自动登录到桌面Skype应用程序,即我们将打开skype.exe并提供身份验证详细信息(用户名,密码)作为参数。

While searching, I got to know we have a Robot API , so I was trying with it in below way. 在搜索时,我知道我们有一个Robot 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:\SmartClientCache\Apps\Ellie
            // Mae\Encompass

            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]);
    }
}

but still not getting any success. 但仍然没有成功。

Is it really possible to make auto login to any desktop application? 是否可以自动登录任何桌面应用程序?

Please let me know if any suggestions or ways to available to achieve it? 请让我知道是否有任何建议或方法可以实现?

As far as I know this isn't possible in Java. 据我所知,这在Java中是不可能的。 Every aplication has it's own login mechanism and primary purpose of the Robot API is for automated testing of Java platform implementations . 每个应用程序都有其自己的登录机制, Robot API的主要目的是用于Java平台实现的自动化测试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM