簡體   English   中英

使用Java自動登錄桌面應用程序

[英]Auto login desktop application using java

我想使用Java自動登錄到任何桌面應用程序,例如Lotus,Outlook或任何其他需要用戶身份驗證的應用程序。

假設我想使用Java程序自動登錄到桌面Skype應用程序,即我們將打開skype.exe並提供身份驗證詳細信息(用戶名,密碼)作為參數。

在搜索時,我知道我們有一個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]);
    }
}

但仍然沒有成功。

是否可以自動登錄任何桌面應用程序?

請讓我知道是否有任何建議或方法可以實現?

據我所知,這在Java中是不可能的。 每個應用程序都有其自己的登錄機制, Robot API的主要目的是用於Java平台實現的自動化測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM