From 755e7bcb3dc14b506f82511e9a8ac37587695f2c Mon Sep 17 00:00:00 2001 From: Jan-Lukas Pagel Date: Tue, 16 May 2017 17:39:00 +0200 Subject: [PATCH] new keyboard intigration --- META-INF/MANIFEST.MF | 3 + src/Keyboard.java | 922 ++++++++++++++++++++++++++++++++++++----- src/PasswordTyper.java | 2 + 3 files changed, 816 insertions(+), 111 deletions(-) create mode 100644 META-INF/MANIFEST.MF diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..4202944 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: PasswordTyper + diff --git a/src/Keyboard.java b/src/Keyboard.java index 6d9e1eb..1161961 100644 --- a/src/Keyboard.java +++ b/src/Keyboard.java @@ -19,126 +19,826 @@ public class Keyboard { int length = characters.length(); for (int i = 0; i < length; i++) { char character = characters.charAt(i); - type(character); + System.out.println(character); + keyPress(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_SHIFT, VK_COMMA); break; - case '.': doType(VK_PERIOD); break; - case '>': doType(VK_SHIFT, VK_PERIOD); 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); + public void keyPress(char characterKey) { + + switch (characterKey) { + case '☺': + altNumpad("1"); + break; + case '☻': + altNumpad("2"); + break; + case '♥': + altNumpad("3"); + break; + case '♦': + altNumpad("4"); + break; + case '♣': + altNumpad("5"); + break; + case '♠': + altNumpad("6"); + break; + case '♂': + altNumpad("11"); + break; + case '♀': + altNumpad("12"); + break; + case '♫': + altNumpad("14"); + break; + case '☼': + altNumpad("15"); + break; + case '►': + altNumpad("16"); + break; + case '◄': + altNumpad("17"); + break; + case '↕': + altNumpad("18"); + break; + case '‼': + altNumpad("19"); + break; + case '¶': + altNumpad("20"); + break; + case '§': + altNumpad("21"); + break; + case '▬': + altNumpad("22"); + break; + case '↨': + altNumpad("23"); + break; + case '↑': + altNumpad("24"); + break; + case '↓': + altNumpad("25"); + break; + case '→': + altNumpad("26"); + break; + case '←': + altNumpad("27"); + break; + case '∟': + altNumpad("28"); + break; + case '↔': + altNumpad("29"); + break; + case '▲': + altNumpad("30"); + break; + case '▼': + altNumpad("31"); + break; + case '!': + altNumpad("33"); + break; + case '"': + altNumpad("34"); + break; + case '#': + altNumpad("35"); + break; + case '$': + altNumpad("36"); + break; + case '%': + altNumpad("37"); + break; + case '&': + altNumpad("38"); + break; + case '\'': + altNumpad("39"); + break; + case '(': + altNumpad("40"); + break; + case ')': + altNumpad("41"); + break; + case '*': + altNumpad("42"); + break; + case '+': + altNumpad("43"); + break; + case ',': + altNumpad("44"); + break; + case '-': + altNumpad("45"); + break; + case '.': + altNumpad("46"); + break; + case '/': + altNumpad("47"); + break; + case '0': + altNumpad("48"); + break; + case '1': + altNumpad("49"); + break; + case '2': + altNumpad("50"); + break; + case '3': + altNumpad("51"); + break; + case '4': + altNumpad("52"); + break; + case '5': + altNumpad("53"); + break; + case '6': + altNumpad("54"); + break; + case '7': + altNumpad("55"); + break; + case '8': + altNumpad("56"); + break; + case '9': + altNumpad("57"); + break; + case ':': + altNumpad("58"); + break; + case ';': + altNumpad("59"); + break; + case '<': + altNumpad("60"); + break; + case '=': + altNumpad("61"); + break; + case '>': + altNumpad("62"); + break; + case '?': + altNumpad("63"); + break; + case '@': + altNumpad("64"); + break; + case 'A': + altNumpad("65"); + break; + case 'B': + altNumpad("66"); + break; + case 'C': + altNumpad("67"); + break; + case 'D': + altNumpad("68"); + break; + case 'E': + altNumpad("69"); + break; + case 'F': + altNumpad("70"); + break; + case 'G': + altNumpad("71"); + break; + case 'H': + altNumpad("72"); + break; + case 'I': + altNumpad("73"); + break; + case 'J': + altNumpad("74"); + break; + case 'K': + altNumpad("75"); + break; + case 'L': + altNumpad("76"); + break; + case 'M': + altNumpad("77"); + break; + case 'N': + altNumpad("78"); + break; + case 'O': + altNumpad("79"); + break; + case 'P': + altNumpad("80"); + break; + case 'Q': + altNumpad("81"); + break; + case 'R': + altNumpad("82"); + break; + case 'S': + altNumpad("83"); + break; + case 'T': + altNumpad("84"); + break; + case 'U': + altNumpad("85"); + break; + case 'V': + altNumpad("86"); + break; + case 'W': + altNumpad("87"); + break; + case 'X': + altNumpad("88"); + break; + case 'Y': + altNumpad("89"); + break; + case 'Z': + altNumpad("90"); + break; + case '[': + altNumpad("91"); + break; + case '\\': + altNumpad("92"); + break; + case ']': + altNumpad("93"); + break; + case '^': + altNumpad("94"); + break; + case '_': + altNumpad("95"); + break; + case '`': + altNumpad("96"); + break; + case 'a': + altNumpad("97"); + break; + case 'b': + altNumpad("98"); + break; + case 'c': + altNumpad("99"); + break; + case 'd': + altNumpad("100"); + break; + case 'e': + altNumpad("101"); + break; + case 'f': + altNumpad("102"); + break; + case 'g': + altNumpad("103"); + break; + case 'h': + altNumpad("104"); + break; + case 'i': + altNumpad("105"); + break; + case 'j': + altNumpad("106"); + break; + case 'k': + altNumpad("107"); + break; + case 'l': + altNumpad("108"); + break; + case 'm': + altNumpad("109"); + break; + case 'n': + altNumpad("110"); + break; + case 'o': + altNumpad("111"); + break; + case 'p': + altNumpad("112"); + break; + case 'q': + altNumpad("113"); + break; + case 'r': + altNumpad("114"); + break; + case 's': + altNumpad("115"); + break; + case 't': + altNumpad("116"); + break; + case 'u': + altNumpad("117"); + break; + case 'v': + altNumpad("118"); + break; + case 'w': + altNumpad("119"); + break; + case 'x': + altNumpad("120"); + break; + case 'y': + altNumpad("121"); + break; + case 'z': + altNumpad("122"); + break; + case '{': + altNumpad("123"); + break; + case '|': + altNumpad("124"); + break; + case '}': + altNumpad("125"); + break; + case '~': + altNumpad("126"); + break; + case '⌂': + altNumpad("127"); + break; + case 'Ç': + altNumpad("128"); + break; + case 'ü': + altNumpad("129"); + break; + case 'é': + altNumpad("130"); + break; + case 'â': + altNumpad("131"); + break; + case 'ä': + altNumpad("132"); + break; + case 'à': + altNumpad("133"); + break; + case 'å': + altNumpad("134"); + break; + case 'ç': + altNumpad("135"); + break; + case 'ê': + altNumpad("136"); + break; + case 'ë': + altNumpad("137"); + break; + case 'è': + altNumpad("138"); + break; + case 'ï': + altNumpad("139"); + break; + case 'î': + altNumpad("140"); + break; + case 'ì': + altNumpad("141"); + break; + case 'Ä': + altNumpad("142"); + break; + case 'Å': + altNumpad("143"); + break; + case 'É': + altNumpad("144"); + break; + case 'æ': + altNumpad("145"); + break; + case 'Æ': + altNumpad("146"); + break; + case 'ô': + altNumpad("147"); + break; + case 'ö': + altNumpad("148"); + break; + case 'ò': + altNumpad("149"); + break; + case 'û': + altNumpad("150"); + break; + case 'ù': + altNumpad("151"); + break; + case 'ÿ': + altNumpad("152"); + break; + case 'Ö': + altNumpad("153"); + break; + case 'Ü': + altNumpad("154"); + break; + case '¢': + altNumpad("155"); + break; + case '£': + altNumpad("156"); + break; + case '¥': + altNumpad("157"); + break; + case '₧': + altNumpad("158"); + break; + case 'ƒ': + altNumpad("159"); + break; + case 'á': + altNumpad("160"); + break; + case 'í': + altNumpad("161"); + break; + case 'ó': + altNumpad("162"); + break; + case 'ú': + altNumpad("163"); + break; + case 'ñ': + altNumpad("164"); + break; + case 'Ñ': + altNumpad("165"); + break; + case 'ª': + altNumpad("166"); + break; + case 'º': + altNumpad("167"); + break; + case '¿': + altNumpad("168"); + break; + case '⌐': + altNumpad("169"); + break; + case '¬': + altNumpad("170"); + break; + case '½': + altNumpad("171"); + break; + case '¼': + altNumpad("172"); + break; + case '¡': + altNumpad("173"); + break; + case '«': + altNumpad("174"); + break; + case '»': + altNumpad("175"); + break; + case '░': + altNumpad("176"); + break; + case '▒': + altNumpad("177"); + break; + case '▓': + altNumpad("178"); + break; + case '│': + altNumpad("179"); + break; + case '┤': + altNumpad("180"); + break; + case '╡': + altNumpad("181"); + break; + case '╢': + altNumpad("182"); + break; + case '╖': + altNumpad("183"); + break; + case '╕': + altNumpad("184"); + break; + case '╣': + altNumpad("185"); + break; + case '║': + altNumpad("186"); + break; + case '╗': + altNumpad("187"); + break; + case '╝': + altNumpad("188"); + break; + case '╜': + altNumpad("189"); + break; + case '╛': + altNumpad("190"); + break; + case '┐': + altNumpad("191"); + break; + case '└': + altNumpad("192"); + break; + case '┴': + altNumpad("193"); + break; + case '┬': + altNumpad("194"); + break; + case '├': + altNumpad("195"); + break; + case '─': + altNumpad("196"); + break; + case '┼': + altNumpad("197"); + break; + case '╞': + altNumpad("198"); + break; + case '╟': + altNumpad("199"); + break; + case '╚': + altNumpad("200"); + break; + case '╔': + altNumpad("201"); + break; + case '╩': + altNumpad("202"); + break; + case '╦': + altNumpad("203"); + break; + case '╠': + altNumpad("204"); + break; + case '═': + altNumpad("205"); + break; + case '╬': + altNumpad("206"); + break; + case '╧': + altNumpad("207"); + break; + case '╨': + altNumpad("208"); + break; + case '╤': + altNumpad("209"); + break; + case '╥': + altNumpad("210"); + break; + case '╙': + altNumpad("211"); + break; + case '╘': + altNumpad("212"); + break; + case '╒': + altNumpad("213"); + break; + case '╓': + altNumpad("214"); + break; + case '╫': + altNumpad("215"); + break; + case '╪': + altNumpad("216"); + break; + case '┘': + altNumpad("217"); + break; + case '┌': + altNumpad("218"); + break; + case '█': + altNumpad("219"); + break; + case '▄': + altNumpad("220"); + break; + case '▌': + altNumpad("221"); + break; + case '▐': + altNumpad("222"); + break; + case '▀': + altNumpad("223"); + break; + case 'α': + altNumpad("224"); + break; + case 'ß': + altNumpad("225"); + break; + case 'Γ': + altNumpad("226"); + break; + case 'π': + altNumpad("227"); + break; + case 'Σ': + altNumpad("228"); + break; + case 'σ': + altNumpad("229"); + break; + case 'µ': + altNumpad("230"); + break; + case 'τ': + altNumpad("231"); + break; + case 'Φ': + altNumpad("232"); + break; + case 'Θ': + altNumpad("233"); + break; + case 'Ω': + altNumpad("234"); + break; + case 'δ': + altNumpad("235"); + break; + case '∞': + altNumpad("236"); + break; + case 'φ': + altNumpad("237"); + break; + case 'ε': + altNumpad("238"); + break; + case '∩': + altNumpad("239"); + break; + case '≡': + altNumpad("240"); + break; + case '±': + altNumpad("241"); + break; + case '≥': + altNumpad("242"); + break; + case '≤': + altNumpad("243"); + break; + case '⌠': + altNumpad("244"); + break; + case '⌡': + altNumpad("245"); + break; + case '÷': + altNumpad("246"); + break; + case '≈': + altNumpad("247"); + break; + case '°': + altNumpad("248"); + break; + case '∙': + altNumpad("249"); + break; + case '·': + altNumpad("250"); + break; + case '√': + altNumpad("251"); + break; + case 'ⁿ': + altNumpad("252"); + break; + case '²': + altNumpad("253"); + break; + case '■': + altNumpad("254"); + break; + + default: + return; } + } - private void doType(int... keyCodes) { - doType(keyCodes, 0, keyCodes.length); - } - - private void doType(int[] keyCodes, int offset, int length) { - if (length == 0) { + private void altNumpad(int... numpadCodes) { + if (numpadCodes.length == 0) { return; } - robot.keyPress(keyCodes[offset]); - doType(keyCodes, offset + 1, length - 1); - robot.keyRelease(keyCodes[offset]); + robot.keyPress(VK_ALT); + + for (int NUMPAD_KEY : numpadCodes) { + robot.keyPress(NUMPAD_KEY); + robot.keyRelease(NUMPAD_KEY); + } + + robot.keyRelease(VK_ALT); + } + + private void altNumpad(String numpadCodes) { + if (numpadCodes == null || !numpadCodes.matches("^\\d+$")) { + return; + } + + robot.keyPress(VK_ALT); + + for (char charater : numpadCodes.toCharArray()) { + + int NUMPAD_KEY = getNumpad(charater); + + if (NUMPAD_KEY != -1) { + robot.keyPress(NUMPAD_KEY); + robot.keyRelease(NUMPAD_KEY); + } + } + + robot.keyRelease(VK_ALT); + } + + private int getNumpad(char numberChar) { + switch (numberChar) { + case '0': + return VK_NUMPAD0; + case '1': + return VK_NUMPAD1; + case '2': + return VK_NUMPAD2; + case '3': + return VK_NUMPAD3; + case '4': + return VK_NUMPAD4; + case '5': + return VK_NUMPAD5; + case '6': + return VK_NUMPAD6; + case '7': + return VK_NUMPAD7; + case '8': + return VK_NUMPAD8; + case '9': + return VK_NUMPAD9; + default: + return -1; + } + } public void typeEnter() { diff --git a/src/PasswordTyper.java b/src/PasswordTyper.java index 7d8e274..f31cb27 100644 --- a/src/PasswordTyper.java +++ b/src/PasswordTyper.java @@ -10,6 +10,7 @@ public class PasswordTyper extends JFrame { private JPanel contentPane; private JTextField text; + private Keyboard keyboard; public static void main(String... args) { @@ -57,6 +58,7 @@ public class PasswordTyper extends JFrame { } catch (InterruptedException e) { e.printStackTrace(); } + keyboard.type(text.getText()); keyboard.typeEnter(); }