闲来无事做,每次挂外网要用EasyConnect登陆,然而每次登陆都要去输入密码,主要是没有记忆密码功能,太麻烦了。就想着能不能通过代码实现,使其能点击运行就可以让他自动打开该软件,并将账号密码自动输入,自动点击确认登陆。
要实现这些功能,首先要明白Java代码如何打开其他的软件。这就牵扯到了Runtime类,通过Runtime类,调用exec()函数打开软件。
打开软件之后,就要对账号密码进行输入,一开始就想通过输出流将数据通过输出流接管其输入,将输出流将数据输入到输入框中,结果发现不成功。但是为了实现这个功能,又不想耗费过多的时间想怎么实现。所以就想直接用土办法直接暴力实现。这就牵扯到了Java中的robot类,用这个类可以实现对人对键盘和鼠标操作进行模拟。用robot的keyPress()模拟键盘按压功能,用mousePress()模拟鼠标按压。
因为软件一打开就已经定位到账号输入框,可以直接调用keyPress(KeyEvent.VK_1),就可以实现对输入框输入数字1,同理,想要输入3就用KeyEvent.VK_3,就可以对输入框进行输入。
由上图可以看出当我们输入账号后,需要输入密码,但是从输入账号到输入密码,需要将键盘光标锁定到密码输入框。本来想要看能否通过程序获取输入框的各个输入位置,然而偷懒的我不想继续想下去了,直接用土办法,用一些不需要脑子的办法。软件的自动打开有其打开的默认位置,而且,每次打开的位置一样。所以可以通过屏幕对程序进行像素定位。确认密码输入框的位置。用mousePress(InputEvent.BUTTON1_MASK)模拟在该处进行鼠标左键点击。就可以对该输入框进行移动光标(我真的太懒了,不想思考原先的对输入进行定位方法)同理就可以对密码进行输入。
在实现这个的过程中,还要注意对程序的时间延迟,如果软件还没打开,程序就已经执行完了,那肯定是不成功的。所以打开软件后要适当的延迟,等待软件打开,然后再对密码进行输入。
贴个代码模板
`import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
public class OpenAppView {
void open() throws IOException, InterruptedException, AWTException {
Runtime a = Runtime.getRuntime();
Process p = a.exec("【软件位置(绝对路径)】");
//代码休眠
Thread.sleep(5000);
Robot robot = new Robot();
robot.delay(500);
//输入账号模拟键盘输入
robot.keyPress(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_3);
robot.mouseMove(1200,470);
//模拟鼠标左键输入
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
//输入密码模拟键盘输入
robot.keyPress(KeyEvent.VK_8);
robot.keyRelease(KeyEvent.VK_8);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
public static void main(String[] args) throws IOException, InterruptedException, AWTException {
OpenAppView openAppView = new OpenAppView();
openAppView.open();
}
}`
注意:在模拟键盘输入时要模拟按压,还要模拟释放键盘