如何通过 Android 键盘控制 Windows?

How to control Windows from Android Keyboard?

我在客户端为 Android 成功创建了移动应用程序。

然后服务器端,也就是windows服务器代码也创建了。我可以输入所有字母数字等等。

我的问题是使用 shift 键和“@”键。我的项目需要“@”。当我按“@”时,连接崩溃并显示...

无效的键码 在 sun.awt.windows.WRobotPeer.keyPress(本机方法) 在 java.awt.Robot.keyPress(来源不明) 在 pcHotkey.keyboardServer$Capitalizer.run

现在,我应该如何在我的应用程序中输入“@”。然后我按下 shift 键,它正确通过并且没有停止按下状态。

我的代码在这里,

 1st class:
    aMap.put("Shift", KeyEvent.VK_SHIFT);
        aMap.put("At", KeyEvent.VK_AT);
    try{
        robo =  new Robot();
        }
        catch(Exception e)
        {}
        ServerSocket listener = new ServerSocket(9898);
        try {
            while (true) {
                new Capitalizer(listener.accept(), clientNumber++).start();
            }
        } finally {
            listener.close();
        }        
  

     2nd class :

        public Capitalizer(Socket socket, int clientNumber) {
            this.socket = socket;
            this.clientNumber = clientNumber;
            log("New connection with client# " + clientNumber + " at " + socket);
        }

        public void run() {
            try {
              BufferedReader in = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

                // Send a welcome message to the client.
                out.println("Hello, you are client #" + clientNumber + ".");
                out.println("Enter a line with only a period to quit\n");

               while (true) {
                    String input = in.readLine();
                    System.out.println(input);
                    if(input.equals("Caps")){
                     Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_CAPS_LOCK, true);
                                   ;
                    }


                    else if(input.equals("At"))
                    {
                     log("Log Value : "+ input);
                     //Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_SHIFT, true);
                     
                     robo.keyPress(aMap.get("At"));
                     //Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_SHIFT, true);
                    }
                    else
                    robo.keyPress(aMap.get(input));

                }
            } catch (IOException e) {
                log("Error handling client# " + clientNumber + ": " + e);
            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    log("Couldn't close a socket, what's going on?");
                }
                log("Connection with client# " + clientNumber + " closed");
            }

我通过传递 "SHIFT" 和“2”的键码来完成。问题现已解决。