首页 > 解决方案 > Java机器人不要输入@

问题描述

嘿,我想为电子邮件和 CO 创建自己的自动登录,作为练习,因为我仍然是初学者。我为此使用了 Java Robot,因为我知道它没有所有特殊字符,所以我想在机器人获取某些字符之前捕获它们。我也这样做(我认为)。但我总是收到“无效的密钥代码”错误。有人有建议吗 ?我使用德语键盘

import java.io.IOException;
import java.awt.*;
import java.awt.event.*;

    public class Login {

        public static void main (String [] args) {
    /*  args 0 is for the website
        args 1 is for the email adresse
        args 2 is for the password
        */
        try {
//            Process p1= Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\"");
              Process p1= Runtime.getRuntime().exec("\"C:\\ProgramFiles \\Notepad++\\notepad++.exe\""); // i use notepad here for testing
              Thread.sleep(100);    

              write(args[0]);
              Thread.sleep(300);

              write(args[1]);
              Thread.sleep(300);

              write(args[2]);

//              p1.destroy();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }



    public static void write(String s)
    {
      try
      {
        Robot r = new Robot();
        int i = 0;
        char[] buchstaben = s.toCharArray();
        String AT = "@";


        while (i<s.length())
        {
          System.out.println("KeyEvent ist: "+ buchstaben[i]);

          if((String.valueOf(buchstaben[i]).contains(AT))==true)
          {

              r.keyPress(KeyEvent.VK_AT);
//            r.keyPress(KeyEvent.VK_ALT_GRAPH);
//            r.keyPress('Q');
              r.delay(250);
              r.keyRelease(KeyEvent.VK_AT);
//            r.keyRelease(KeyEvent.VK_ALT_GRAPH);
//            r.keyRelease(KeyEvent.VK_Q);
              i++;
          }


          if(Character.isUpperCase(buchstaben[i]))
          {
             r.keyPress(KeyEvent.VK_SHIFT);
          }
          synchronized(r)
          {

            r.keyPress(Character.toUpperCase(buchstaben[i]));
            r.delay(250);
            r.keyRelease(Character.toUpperCase(buchstaben[i]));
          }
          if(Character.isUpperCase(buchstaben[i]))
          {
             r.keyRelease(KeyEvent.VK_SHIFT);
          }
          i++;
        }

        r.keyPress(KeyEvent.VK_ENTER);
        r.delay(250);
        r.keyRelease(KeyEvent.VK_ENTER);
      }
      catch(AWTException e)
      {
        System.err.println(e);
      }
    }


}

线程“主”java.lang.IllegalArgumentException 中的异常:无效的键码

at sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.awt.Robot.keyPress(Robot.java:354)
at Login.write(Login.java:53)
at Login.main(Login.java:21)

标签: javasignawtrobot

解决方案


推荐阅读