如何从Android键盘控制Windows?

时间:2015-09-30 13:15:48

标签: java android sockets keylistener keyevent

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

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

我的问题是使用shift键和“@”键。我需要“@”进入我的项目。当我按下“@”时连接崩溃并说......

无效的密钥代码     at sun.awt.windows.WRobotPeer.keyPress(Native Method)     在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");
            }

1 个答案:

答案 0 :(得分:0)

我通过传递" SHIFT"的密钥代码。和" 2"。问题现在得到解决。